C语言二进制位运算的问题

2024-11-29 14:50:05
推荐回答(1个)
回答(1):

第一个结果的确是1111,但用%D输出就是输出他的十进制数,所以输出的是15
第二个就不是1111了,而是32个1(假设INT点32位),因为向右移时,第一位(即符号位)是1,所以前面补的是1而不是0,所以是32个1,然后用%D输出其十进制数当然就是-1了
你可以改一下,看一下他的十六进制数就知道了,输出的时候用这个格式,printf("%X\n",c);