本来写JAVA的时候遇到的问题,为了验证一下是否是语言出现的问题,又用C实现了一遍:
#include <stdio.h>
int main() {
int x = 255;
printf("%d\n", x<<24);
}
255(00000000 00000000 00000000 11111111)
<<24后我认为应该是:11111111 00000000 00000000 00000000 (-2130706432)
但程序结果是:10000001 00000000 00000000 00000000 (-16777216)
又试了其他的数(224,240,252,254),都是相同的结果,就是中间的几个1,被自动转成0
#include <stdio.h>
int main() {
int x = 255;
printf("%d\n", x<<24);
}
255(00000000 00000000 00000000 11111111)
<<24后我认为应该是:11111111 00000000 00000000 00000000 (-2130706432)
但程序结果是:10000001 00000000 00000000 00000000 (-16777216)
又试了其他的数(224,240,252,254),都是相同的结果,就是中间的几个1,被自动转成0