-1 对256求模的值为255?

2019-04-13 12:17发布

把-1赋值给一个8位的uinsigned char,结果是255? #include #include #include using namespace std; int main() { unsigned char a = -1; printf("%d ",a); cout << a%256 << endl; return 0; } 输出结果: 255 255 在计算机中所有内容都是以二进制的形式存储的,并且是以补码的形式存储。
我们知道 - 1 本身是个负数,它的原码是1000 0001,对应的反码(符号位不变,其它位取反)是1111 1110,对应的补码(反码的基础上+1)是1111 1111,计算机中存储了-1的补码,也就是1111 1111,这时候把它赋值给了 uinsigned char无符号的,那么1111 1111就会被直接当做无符号数来转换,1111 1111按照无符号读取就是十进制的255。然后255对256求模,就会得到255