具有以下简单代码:
...
short s1 = 0b1100000000000001;
...
if( s1 == 0b1100000000000001 )
printf("==\n");
else
printf("!=\n");
为什么比较表达式要起作用,需要将文字0b1100000000000001
显式转换为短s1 == (short)0b1100000000000001
?为什么只s1 == 0b1100000000000001
?不起作用?条件下,文字0b1100000000000001的默认类型是什么?
答案 0 :(得分:2)
带有签名的16位短裤,short s1 = 0b1100000000000001;
不适合。它将被转换为-16383
,因为最高有效位(代表32768
的值)在带符号的16位-32768
中代表了short
的值,因此为什么降低了65536
。这就是为什么它不等于0b1100000000000001
(即49153
)的原因。您的编译器应在此处发出警告。
在比较中说(short)0b1100000000000001
就是在这里强制执行相同的转换,这就是为什么它可以正常工作。因此,现在您将-16383
与-16383
进行比较。
文字0b1100000000000001的默认类型是什么? 条件?
根据this,它是int
。