当负数赋给无符号数时:

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main(){
unsigned char uval = -1;
cout<<uval + 0<<endl;
return 0;
}
//结果为255
  • 计算机中,数都是以二进制数的形式来存储的,并且是以补码的形式。

  • 什么是补码?

1
2
3
4
5
6
7
8
9
10
原码:11010101
原码的首位如果为0,则表示正数;如果为1,则表示负数

正数的反码不变,负数的反码是将除首位外所有数取反
反码:10101010

正数的补码不变,负数的补码是在反码的基础上加1
补码:10101011

补码加上原码始终等于0

当将一个负数赋给无符号数时,负数会被强制转换成无符号的形式,而负数在计算机中是以补码的形式存储的,所以直接读取补码的十进制表示即为最终最终结果。

1
2
-1的补码:11111111
11111111的十进制表示即为255