a - 1做运算时,a 是unsigned char类型,是短类型,1 是int类型,是长类型。做运算时较短的一方会...
-1在内存中以补码的形式存在, 源码:1(符号位)0000 0001 补码=源码取反加1(记住:符号位不变) 即1111 1110+1 即为1111 1111 unsigned char(1111 1111)当然就是255了 同理可推出unsigned char(-2) 为 254 顺便说一下: 原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示...
就是说:多字节‘-1’的第一个字节‘-’被忽略了,剩下字符‘1’,所以是输出1。你可以把‘-1’换成‘-4’看一下结果。如果还有问题,你可以追问。那么为什么输出255呢?我估计你看到的程序本来应该是 int main(){ unsigned char a = -1;cout << (int)a << endl;return 0;} ...
所以,当使用unsigned char 即无符号整数时,-1用补码表示即1111 1111,十六进制表示为0xff ,十进制表示即为255。
也即c++primer上说的modulo256),usigned char c = 1111 1111,而这个数解释成无符号char类型就是...
-1在存储时,第一位是符号位,-用1表示,负数用补码存储,因此-1,存储的时候计为11111111。第一个有符号,读出为-1;第二个为无符号,此时8位都为数字位,读为255。
因为 unsigned char 类型所能表示的数的范围是0~255,所以,主要是看这 i-1 是以什么方式来引用的。 此时已经发生了“溢出”错误。做减法时,仍是以unsigned char类型来运行的。 如果是 i=i-1;那 i 的值会是 255; 如果是 int a=i-1;那a的值会 ...
其结果是初始值对无符号类型表示数值总数取模后的余数。8比特大小的unsigned char在计算机中可表示0~255区间内的值(总数为256)。如果我们把-1赋给unsigned char,由于-1的二进制值为11111111(转换为10进制是255),对总数256取模,余数自然就是255。参考:c++ primer第五版33页 ...
因为 unsigned char 类型所能表示的数的范围是0~255,所以,主要是看这 i-1 是以什么方式来引用的。此时已经发生了“溢出”错误。做减法时,仍是以unsigned char类型来运行的。如果是 i=i-1;那 i 的值会是 255;如果是 int a=i-1;那a的值会是 -1;或是printf("%d",i-1); 也是会输出...
unsigned char 类型所能表示的数的范围是0~255,所以,主要是看这 i-1 是以什么方式来引用的。此时已经发生了“溢出”错误。做减法时,仍是以unsigned char类型来运行的。如果是 i=i-1;那 i 的值会是 255;如果是 int a=i-1;那a的值会是 -1;或是printf("%d",i-1);也是会输出 -1 ...