【发布时间】:2013-05-11 11:41:23
【问题描述】:
考虑这段代码:
uint16_t a = ~ ( uint16_t ) 0;
int16_t b = ~ ( int16_t ) 0;
printf (
"%d %d %d %d\n",
a == ~ ( uint16_t ) 0,
a == ( uint16_t ) ( ~ ( uint16_t ) 0 ),
b == ~ ( int16_t ) 0,
b == ( int16_t ) ( ~ ( int16_t ) 0 )
);
输出是:
0 1 1 1
GCC 抛出关于 a == ~ ( uint16_t ) 0 的警告:
由于数据类型[-Wtype-limits]的范围有限,比较总是错误的
为什么按位“非”运算符试图返回有符号值?我怎样才能防止这种情况发生?
【问题讨论】:
-
波浪号
~运算符是 not 一元非。它是一个(一元)flip all bits位运算符。 -
~是一个补码运算符。 -
我现在该操作员做什么 =)。我不确定应该如何命名该运算符。维基百科说“按位'不是'”
-
@puchu
~是按位非,!是布尔非...