原码、反码、补码及减法运算

简介: 原码、反码、补码及减法运算

负数采用补码的形式表示,这是为了硬件操作的方便,把减法也转换成加法来运算


引入反码、补码是为了解决减法的问题,换句话数就是解决负数的问题,正数不存在这些问题,所以它的反码补码就是它本身


正数的反码、补码都为本身

有符号的基本数据类型中,最高位0表示正数,最高位1表示负数

对于负数来讲,它的反码就是除去符号位取反,然后加1就得到了它的补码

1、原码与反码转换

公式


原码 => 反码 = 符号位不变,数值位分别“按位取反”
反码 => 原码 = 符号位不变,数值位分别“按位取反”

eg:


-3
= 10000011  原码
=>11111100  反码
=>10000011  原码

2、原码与补码转换

公式


原码 => 补码 = 反码 + 1 
补码 => 原码 = (补码 -1)取反码 = 补码的反码 + 1
补码的补码等于原码

eg:


-3
=10000011 原码
=11111100 反码
=11111101 补码
=11111100 补码-1
=10000011 (补码-1)取反码 == 原码
或者
=11111101 补码
=10000010 补码的反码
=10000011 补码的补码

补码的补码等于原码


例如:

byte型数据1个字节占8位


-7可以表示为10000111,最高位的1代表负号,它的反码是除去符号位各位取反为11111000,然后加1得到补码11111001


8的二进制表示为00001000


现在我们运算 8 - 7,在计算机并不是用8减去7,而是用8 + (-7),


也就是用00001000加上-7的补码11111001,两个有符号数相加,

如果符号位相加有近位就删去符号位的进位,得到00000001,也就是1.


-7 =》 0B10000111 => 反码0B11111000 => 补码0B11111001
8 - 7
= 8 + (-7)
= 0B00001000 + 0B11111001
= 0B00000001
= 1

相关文章
|
8月前
原码、反码、补码的互相转换
原码、反码、补码的互相转换
201 0
|
8月前
|
存储
原码,补码的除法
原码,补码的除法
103 1
|
8月前
|
存储
原码,补码的乘法运算
原码,补码的乘法运算
135 0
|
8月前
原码反码补码移码的介绍和计算
原码反码补码移码的介绍和计算
198 1
|
8月前
|
存储
原码,反码,补码以及计算
原码,反码,补码以及计算
97 0
|
机器学习/深度学习 存储
数据的表示:原码、反码、补码、移码以及浮点数的运算
数据的表示:原码、反码、补码、移码以及浮点数的运算
539 0
数据的表示:原码、反码、补码、移码以及浮点数的运算
原码、反码、补码的互换
计算机中国的有符号数(整数)有三种表达方式,即原码、反码、补码。
【学习笔记之我要C】初识操作符和原码、反码、补码
【学习笔记之我要C】初识操作符和原码、反码、补码
77 0
|
存储
数制间的转换,原码、反码、补码
数制间的转换,原码、反码、补码
867 0
数制间的转换,原码、反码、补码

热门文章

最新文章