【发布时间】:2020-07-30 04:43:06
【问题描述】:
我最近在 c 中遇到了 '~' 运算符。根据我收集的信息,它只是翻转给定数字的所有位,从而改变它的值。所以我玩弄它并写了这段代码:
第一个程序
#include <stdio.h>
int main(int argc, char *argv[]){
int x = 100;
printf("%d\n", x);
x = ~x;
printf("signed value = %d\nunsigned value = %u\n", x, x);
return 0;
}
输出:
100
signed value = -101
unsigned value = 4294967195
然后,我尝试用浮点数做同样的事情:
第二个节目
#include <stdio.h>
int main(int argc, char *argv[]){
float x = 100;
printf("%f\n", x);
x = ~x;
printf("new value = %f\n", x);
return 0;
}
但我得到一个错误:
tests.c:6:6: error: wrong type argument to bit-complement
x = ~x;
所以我做了一些研究,发现我们无法在浮点数上使用“~”运算符。 这是真的?如果是,那我的问题是为什么?
【问题讨论】:
-
但是为什么你要翻转
float的所有位? -
^、&、|和^等位运算符对整数进行运算。当然,可以使它们对浮点数的按位表示进行运算,但是对浮点值的影响很难描述。如果您真的想这样做,可以将其别名为整数,然后应用运算符。 -
为什么?这是语言的设计选择,没有特别的原因。对
float变量进行按位否定(或任何其他按位运算符)会得到什么结果?它肯定不会像整数那样表现。它几乎没有用处。 -
@WeatherVane 没有特别的原因。正如我所提到的,我对
~运算符(以及一般的位运算符)还比较陌生。我好奇地问。 -
好奇心是好的!但它确实需要一个目的;)
标签: c operators bitwise-operators