c语言 关于存储一个大于该数值类型范围的数之后的输出结果

给char赋值一个0xA5即165,那么编译器输出的结果该是多少呢?

答案是-91,为什么是这个结果呢?

在编译器当中165这个正数首先会转化成补码存储到内存当中,正数的补码还是其本身:

[1010 0101]2

然而将这个数提取出来的时候,编译器发现寄存器当中的这个补码最高位是个1,所以编译器会以为这个补码是个负数,所以会将其取反加一取出,变成

[1101 1011]2

取出的结果就是-91了。

上一篇:MVT和MTV


下一篇:165-286. 墙与门