减法的运算法则:
取反加1(取反包括符号位,这不是取补码),然后相加
(一)无符号 int 减法
unsigned int a=4;
unsigned int b=3;
unsigned int c=a-b;
a减b相当于b取反加一加上a
b:0000 0000 0000 0000 0000 0000 0000 0011
减法,b取反加一:1111 1111 1111 1111 1111 1111 1111 1101
a:0000 0000 0000 0000 0000 0000 0000 0100
相加得:
0000 0000 0000 0000 0000 0000 0000 0001
即结果为1
(二)带符号 int 加减法
int a=4;
int b=3;
int c=a-b;
同上,减b则加上b取补码
b:0000 0000 0000 0000 0000 0000 0000 0011
减法,b取反加一: 1111 1111 1111 1111 1111 1111 1111 1101
a:0000 0000 0000 0000 0000 0000 0000 0100
相加
0000 0000 0000 0000 0000 0000 0000 0001
即结果为1
看一下加上负数的操作
int a=4;
int b=-3;
int c=a+b;
b绝对值为3 原码:0000 0000 0000 0000 0000 0000 0000 0011
因为b=-3 是负数,所以数据储存的是补码
b在计算机中的储存(补码):1111 1111 1111 1111 1111 1111 1111 1101
a:0000 0000 0000 0000 0000 0000 0000 0100
相加
0000 0000 0000 0000 0000 0000 0000 0001
即结果为1
再看减去一个负数的操作
int a=4;
int b=-3;
int c=a-b;
b绝对值为3 原码:0000 0000 0000 0000 0000 0000 0000 0011
因为b=-3 是负数,所以数据储存的是补码
b在计算机中的储存(补码):1111 1111 1111 1111 1111 1111 1111 1101
减法,b取反加一: 0000 0000 0000 0000 0000 0000 0000 0011(包括符号位哦)
a:0000 0000 0000 0000 0000 0000 0000 0100
相加
0000 0000 0000 0000 0000 0000 0000 0111
即结果为7
综上:
减法——取反加一,相加
(取反包括符号位)