条件中的二进制文字

时间:2019-05-07 09:08:59

标签: c++

具有以下简单代码:

...
short s1 = 0b1100000000000001;
...
if( s1 == 0b1100000000000001 )
  printf("==\n");
else
  printf("!=\n");

为什么比较表达式要起作用,需要将文字0b1100000000000001显式转换为短s1 == (short)0b1100000000000001?为什么只s1 == 0b1100000000000001?不起作用?条件下,文字0b1100000000000001的默认类型是什么?

1 个答案:

答案 0 :(得分:2)

带有签名的16位短裤,short s1 = 0b1100000000000001;不适合。它将被转换为-16383,因为最高有效位(代表32768的值)在带符号的16位-32768中代表了short的值,因此为什么降低了65536。这就是为什么它不等于0b1100000000000001(即49153)的原因。您的编译器应在此处发出警告。

在比较中说(short)0b1100000000000001就是在这里强制执行相同的转换,这就是为什么它可以正常工作。因此,现在您将-16383-16383进行比较。


  

文字0b1100000000000001的默认类型是什么?   条件?

根据this,它是int