Day 2 原码补码反码(1)

文章详细介绍了二进制中的原码、反码和补码的概念,以及它们在表示正负数时的规则。此外,还探讨了负数在数学中的意义,以及补码在计算机存储中的应用。同时,文章提到了二进制、八进制和十六进制之间的转换方法,包括三位转换为八进制和四位转换为十六进制的规则。
摘要由CSDN通过智能技术生成

Day 2 原码补码反码

原码

在二进制当中,可没有数字前面加一个负号就可以表示负数这么一说,那么我们怎么表示一个二进制负数呢?

我们可以在二进制中加一个符号位来区分正数与负数

比如在 8 8 8 位二进制数中,用第 8 8 8 为作为符号位,可以用 00000010 00000010 00000010 表示 2 2 2 ,用 10000010 10000010 10000010 表示 − 2 -2 2

带有符号位的二进制数,就叫做原码,而这个原码的绝对值就叫做真码,也就是原码去掉符号位

所以 **原码 = 符号位 + 真码**

反码

正数的反码是正数的原码,而负数的反码就不一样了

负数的反码就是负数的原码除了符号位,其余位取反

比如 10001010 10001010 10001010 的反码就是 11110101 11110101 11110101

补码

又是一个灵魂拷问:“在数学当中,负数的意义是什么呢?”

− 1 -1 1 就是表示一个加上 1 1 1 就等于 0 0 0 的数

− 2 -2 2 就是表示一个加上 2 2 2 就等于 0 0 0 的数

− 114514 -114514 114514 就是表示一个加上 114514 114514 114514 就等于 0 0 0 的数

那么补码的意义就是为了表示一个负数的意义

负数 + 补码的真值 = 0 0 0

也可以用另一种定义方式:补码 = = = 反码 + 1 + 1 +1

在计算机当中,有一个神奇的现象,你可以试试,在 Dev-C++ 中,让程序输出 cout << (~5) ;得到的会是 − 6 -6 6~5 5 5 5 取反的意思)

有同学就会说了,这不对呀! 5 5 5 的二进制明明是 101 101 101 ,取反之后不应该是 010 010 010 也就是 2 2 2 吗?为什么输出的是 − 6 -6 6

原来, 在计算机中是这样是用补码存储的

$00000101$ 的反码是 $11111010$ ,而 $11111010$ 的补码就是反码$ + 1$

$10000101+1 = 100000110 = (-6)_2$


总结来说,可以归纳为一个表格

反码补码
正数是它本身是它本身
负数符号位不变,其余按位取反反码+1

二进制、八进制、十六进制之间的转换

2 3 = 8 2^3 = 8 23=8 ,所以在二进制和八进制之间可以三位三位地转换

例如 0100010111 0100010111 0100010111 我们可以三位三位的拆开 0   100   010   111 0\ 100\ 010\ 111 0 100 010 111 每三位数对应的数字就是 4 , 2 , 7 4,2,7 4,2,7 了,直接连起来

就有 ( 427 ) 8 (427)_8 (427)8

进制转换就是那么简单

同理可得, 2 4 = 16 2^4 = 16 24=16 ,所以二进制和十六进制之间可以四位四位地转换

01011000 01011000 01011000 的十六进制就是 ( 58 ) 16 (58)_{16} (58)16

那么 [ 10 , 15 ] [10, 15] [10,15] 怎么表示呢

我们用 A A A 表示 10 10 10, B B B 表示 11 11 11 , 依此类推, F F F 表示 15 15 15

[ 10 , 15 ] [10, 15] [10,15] 怎么表示呢

我们用 A A A 表示 10 10 10, B B B 表示 11 11 11 , 依此类推, F F F 表示 15 15 15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值