【发布时间】:2016-04-02 05:49:23
【问题描述】:
这是在 Dev-cpp C++ 5.4.2 上用 C++ 编写的两个简单示例:
float a, b, c;
if (a | b & a | c)
printf("x = %.2f\tF = %.0f\n", x, F);
else
printf("x = %.2f\tF = %.2f\n", x, F);
这个代码:
float a, b, c;
if (a || b && a || c)
printf("x = %.2f\tF = %.0f\n", x, F);
else
printf("x = %.2f\tF = %.2f\n", x, F);
谁能告诉我|| > | 和& > && 之间的区别。第二个代码有效,但第一个无效。
编译器会给出错误信息:
[错误] 'float' 和 'float' 类型的无效操作数到二进制 'operator&'。
【问题讨论】:
-
可以从那里得到一些起点,关于指针和比较运算符en.cppreference.com/w/cpp/language/operator_comparison 和cplusplus.com/doc/tutorial/pointers
-
我觉得奇怪的是 C++ 不允许对浮点数进行按位运算,尽管可以说它们没有多大意义,但这些仍然是位序列,并且可以对它们进行算术运算。跨度>
-
@WillemVanOnsem 按照这个逻辑,为了支持二进制操作,他们需要添加一个新类型,例如
binary32、binary64等以及一组转换函数。它们在 c++ 中在语义上有所不同,但人们看不到,因为它们在语法上与整数没有区别。话虽如此,一些聪明的人还是那样做的,例如C#。这不是一个显而易见的设计决策 IMO。
标签: c++ bitwise-operators