“~”代表取反运算符,本文简单介绍"~"是如何进行运算,原码、反码、补码、数字计算过程。
我们在计算机上输入数字时,计算机底层都是采用二进制进行运算,底层只能进行加法运算,那么就会涉及到如何用加法进行减法运算,其中就涉及到原码、反码、补码
- 本文介绍的是8位二进制的数值
- 8位二进制边界值在 [-127,+127],00000000 ~11111111
- 127的二进制原码0111 1111
- -127的二进制原码1000 0000
一、原码
原码就是数字的二进制表现形式
二进制的首位为标志位(0代表正数,1代表负数),不带入进制换算
10的二进制原码:0000 1010
-10的二进制原码:1000 1010
二、反码
正数:反码=原码=补码
负数:反码=原码除首位每一位都取反(0变1,1变0),
即:10的二进制原码:0000 1010
10的二进制反码:0000 1010
----------------------------------------
-10的二进制原码:1000 1010
-10的二进制反码:1111 0101
负数:补码=反码+1
即
10的二进制原码:0000 1010
10的二进制反码:0000 1010
10的二进制补码:0000 1010
----------------------------------------
-10的二进制原码:1000 1010
-10的二进制反码:1111 0101-10的二进制补码:1111 0110
四、"~"取反运算符计算过程(全部取反,包括首位)
举例:计算~10
第一步:
求得数字10的二进制补码是0000 1010
第二步:
对10的补码所有数字全部取反,得到~10的补码1111 0101
(得到的是~10的补码,因为计算机内部只有加法运算,由补码计算存储)
第三步:补码➡反码➡原码
~10反码=补码-1=1111 0100(因为1111 0101首位为1,计算机判定为负数,故而采用负数补码运算倒推)
~10原码=反码取反(首位不变)=1000 1011
第四步:二进制原码➡十进制数字
1000 1001首位是1,所以是负数,不带入进行换算,其余位数000 1001。二进制转换十进制得到11
第五步:加上负号得: ~10=-11
举例:计算~-11
1、-11的原码:1000 1011
-11的反码:1111 0100
-11的补码:1111 0101
2、取反得(因0000 1010首位为0,计算机判定为正数,故而采用正数补码运算倒推)
~-11的补码:0000 1010
~-11的反码:0000 1010
~-11的原码:0000 1010
3、二进制转十进制:~-11=12
计算~0
1、0的原码=0的补码:0000 0000
2、取反运算得~0补码:1111 1111
3、~0的反码:1111 1110
4、~0的原码:1000 0001
5、~0=-1
五、数字计算过程
1、计算10-11
因为计算机中只有加法,所以10-11=10+(-11),分别求10、-11的补码
10的原码:0000 1010
10的反码:0000 1010
10的补码:0000 1010-11的原码:1000 1011
-11的反码:1111 0100
-11的补码:1111 0101
2、补码相加
10的补码+(-11)的补码
0000 1010
+ 1111 0101
————————————
1111 1111
3、补码➡反码➡原码
补码:1111 1111
反码:1111 1110
原码:1000 0001
4、二进制原码转十进制
1000 0001 (二进制) = -1 (十进制)
10 - 11 = -1