Mit*_*nan 11 c operators shift
当-1使用左移位算子在C编程中左移时,数字的结果是什么?
-1
例如:
23 << -1
too*_*ite 9
从C11标准6.5.7p3(对于以前的版本它基本相同):
"如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为未定义."
IOW:未定义的行为.准备鼻子恶魔.
简而言之:不要
注意:虽然许多程序员都知道这一点并避免负移位计数,但通常会忽略它,也会计算值>=的位大小也是未定义的.((unsigned int)1 << 32) - 1如果unsigned int有32位或更少,这会使实际上未定义.对于签名值,由于符号,事情变得更加复杂(感谢@chux指向我).这是一个常见的陷阱.对于某些实现,可能会出现常量表达式(编译时评估)和运行时评估的不同结果.
>=
((unsigned int)1 << 32) - 1
unsigned int
归档时间:
10 年,3 月 前
查看次数:
509 次
最近记录:
8 年,9 月 前