我正在尝试寻找一个非零整数a,使得a〉〉31 == 1。我遇到的问题是,任何一个负数的右移都会导致一个负数......除非我对一个原始整数执行移位。例如输出:
int a = -2147483648
a >> 31 = -1
-2147483648 >> 31 = 1
至少,这是我和广发银行混在一起,试图弄清楚发生了什么事时得到的。
我试过其他的输入,比如1,-1,2147483647等等,但是都不起作用。我想我可能误解了整数表示法,但是我不知道是什么,而且很多推荐的帖子要么对我没有意义,要么没有回答我的问题。
2条答案
按热度按时间2w3kk1z51#
有符号整数的右移由实现定义。
大多数现代编译器将其转换为算术移位:
bvuwiixz2#
我现在正试图找到一个非零整数a,使得a〉〉31 == 1。
由于您使用的是 integer 而不是
int
,因此设置了高位的32位unsigned int
将满足此要求。以上将输出1。