图灵Day2笔记
Coding_Zhouzehao
·
2023-07-10 13:49:17
·
个人记录
Day 2 原码补码反码
1.原码
在二进制当中,可没有数字前面加一个负号就可以表示负数这么一说,那么我们怎么表示一个二进制负数呢?
我们可以在二进制中加一个符号位来区分正数与负数
比如在 8 位二进制数中,用第 8 为作为符号位,可以用 00000010 表示 2 ,用 10000010 表示 -2
带有符号位的二进制数,就叫做原码,而这个原码的绝对值就叫做真码,也就是原码去掉符号位
所以 原码 = 符号位 + 真码
2.反码
正数的反码是正数的原码,而负数的反码就不一样了
负数的反码就是负数的原码除了符号位,其余位取反
比如 10001010 的反码就是 11110101
3.补码
又是一个灵魂拷问:"在数学当中,负数的意义是什么呢?"
$-2$ 就是表示一个加上 $2$ 就等于 $0$ 的数
$-114514$ 就是表示一个加上 $114514$ 就等于 $0$ 的数
那么补码的意义就是为了表示一个负数的意义
负数 + 补码的真值 = $0
也可以用另一种定义方式:补码 = 反码 + 1
在计算机当中,有一个神奇的现象,你可以试试,在 Dev-C++ 中,让程序输出 cout << (~5) ; 得到的会是 -6 ( ~5 是 5 取反的意思)
有同学就会说了,这不对呀! 5 的二进制明明是 101 ,取反之后不应该是 010 也就是 2 吗?为什么输出的是 -6 呢
原来, 在计算机中是这样是用补码存储的
即 $10000101+1 = 100000110 = (-6)_2$ 了
------
总结来说,可以归纳为一个表格
| | 反码 | 补码 |
| ---- | ------------------------ | -------- |
| 正数 | 是它本身 | 是它本身 |
| 负数 | 符号位不变,其余按位取反 | 反码+1 |
##### 4.二进制、八进制、十六进制之间的转换
$2^3 = 8$ ,所以在二进制和八进制之间可以三位三位地转换
例如 $0100010111$ 我们可以三位三位的拆开 $0\ 100\ 010\ 111$ 每三位数对应的数字就是 $4,2,7$ 了,直接连起来
就有 $(427)_8
进制转换就是那么简单
同理可得, 2^4 = 16 ,所以二进制和十六进制之间可以四位四位地转换
那么 $[10, 15]$ 怎么表示呢
我们用 $A$ 表示 $10$, $B$ 表示 $11$ , 依此类推,$F$ 表示 $15