【发布时间】:2015-04-23 23:25:38
【问题描述】:
给定
int a = 1; (00000000000000000000000000000001),
我所做的只是
a=(a<<31)>>31;
我认为a 在此声明之后仍应为1(我认为没有任何改变)。然而,结果却是-1 (11111111111111111111111111111111)。有谁知道为什么?
【问题讨论】:
-
查找符号扩展。然后用 unsigned int 再试一次。
-
如果 'unsigned int a=1' 一切正常
-
那个答案指的是运算符
>>>,它绝对不是C++运算符,所以我不认为它是重复的。 -
@ShaneNian 为什么你一直回滚我的编辑,这改进了你的问题格式?
-
假设 2³¹ 可以用
unsigned表示,但不能用int表示,即使a<<31是实现定义的结果,甚至在右移开始发挥作用之前。
标签: c++ bit-manipulation