【发布时间】:2019-05-07 09:08:58
【问题描述】:
有以下简单代码:
...
short s1 = 0b1100000000000001;
...
if( s1 == 0b1100000000000001 )
printf("==\n");
else
printf("!=\n");
为什么比较表达式需要将文字 0b1100000000000001 显式转换为short:s1 == (short)0b1100000000000001?为什么只是s1 == 0b1100000000000001?不工作?字面量 0b1100000000000001 的默认类型是什么?
【问题讨论】:
-
正如 Blaze 的回答中所指定的,这是因为您使用的是签名短,并且您在值中设置了 sign bit。相反,如果您定义了
unsigned short s1 = ....,则您的 if 语句应该可以按预期工作
标签: c++ integer implicit-conversion short