在阅读“计算机系统”一书的同时,从程序员的角度来看。我发现如果我在数据类型的范围内取大部分负值,例如:
char a = -128;
a = - a;
变量a仍然具有-128的值,我理解但是当我做
时char a = 50;
char b = -128;
char r = a - b;
它给我正确的结果-78,为什么?它因为自动升级到int或者有硬件减法而不需要计算两个补码-128 ??
答案 0 :(得分:0)
char a = -128;
表示char a = 0x80;
,因此在促销到int时,它将是0xFFFFFF80
。
-0xFFFFFF80
= 0x00000080
并将其转换为与起始值相同的char 0x80
。
char a = -128;
char b = 50;
char r = a - b;
0xFFFFFF80
0xFFFFFFCE
=
0xFFFFFF4E
所以4E
将写在r
中,即+78。