也即c++primer上说的modulo256),usigned char c = 1111 1111,而这个数解释成无符号char类型就是...
因为 unsigned char 类型所能表示的数的范围是0~255,所以,主要是看这 i-1 是以什么方式来引用的。 此时已经发生了“溢出”错误。做减法时,仍是以unsigned char类型来运行的。 如果是 i=i-1;那 i 的值会是 255; 如果是 int a=i-1;那a的值会 ...
-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的值会是 -1;或是printf("%d",i-1); 也是会输出...
,对于整数在计算机中一般是原码、反码、补码三种编码方式,以-1为例。选择8位的二进制数来表示:-1的原码 10000001 //最高位为符号位 -1的反码 11111110 //符号位不变,各位求反 -1的补码 11111111 //符号位不变,反码加1 所以,当使用unsigned char 即无符号整数时,-1用补码表示即1111 1111...
unsigned char通常能表示的数值范围是0到255。这就好比一个有256个格子的小抽屉柜,从0开始,一格一格往上数,一直数到255。 为啥是0到255呢?这是因为unsigned char一般用8个二进制位来存储数据。8个二进制位,想象一下,就像是8个开关,每个开关只有开和关两种状态,也就是0和1。那8个这样的开关,能组合出多少种...
即为1111 1111 unsigned char(1111 1111)当然就是255了 同理可推出unsigned char(-2) 为 254 顺便说一下: 原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
unsigned char是用1字节存储的,它没有符号位,因此能表示0~1111 1111,最大值就是0xFF,也就是255。char类型是8位,最高位是符号位,0正1负,所以01111111是127。-127是10000001,而10000000换算过来就是-128。一个n位有符号int型数值,其范围为-2^(n-1) ——2^(n-1) -1”。
建议题主去了解下补码,计算机保存数值都以补码的形式保存。-1的补码是11111111,但char的类型是无符号...
就是说:多字节‘-1’的第一个字节‘-’被忽略了,剩下字符‘1’,所以是输出1。你可以把‘-1’换成‘-4’看一下结果。如果还有问题,你可以追问。那么为什么输出255呢?我估计你看到的程序本来应该是 int main(){ unsigned char a = -1;cout << (int)a << endl;return 0;} ...