C++给8位的unsigned类型赋值-1,为什么结果是255不是-1;

如题所述

1.8为二进制0000 0000

2.二进制在计算机中以补码形式存在
正数的补码就是它本身
负数的补码是对应正数的原码取反加1得到

3.-1的补码是 1的原码0000 0001 取反加1就是 1111 1111

4.unsigned是无符号数,把1111 1111看成正数 255 因为255的二进制为(1111 1111)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-16
unsigned类型没有符号
如果赋值-1
相等于赋值0
再减1
而8位的unsigned类型的表示范围是0-255
0-1=-1溢出
于是数向前移动
变成255
第2个回答  2010-09-16
-1在计算机内存的的表示方式是 0x ff (补码),在C++中将-1赋值给unsigned char 类型是合法的,所以赋值过后的8位的unsigned类型变量的值就是255了。
第3个回答  2010-09-16
因为是unsigned,是没有符号的,所以unsigned是不能表示复数的,给unsigned复制-1,就相当于8位全是1,就是255
第4个回答  2010-09-16
unsigned 是无符号数。如果8位的话 最大是 11111111最小是00000000所以范围是0~255 所以赋值-1是不可以的
相似回答