“软件设计师精讲 数据的表示 码制”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第24行: | 第24行: | ||
!数值1(正1) | !数值1(正1) | ||
!数值-1(负1) | !数值-1(负1) | ||
+ | !1-1(也就是1+(-1)) | ||
|- | |- | ||
|原码 | |原码 | ||
|0000 0001 | |0000 0001 | ||
|1000 0001 | |1000 0001 | ||
+ | |1000 0010 | ||
|} | |} | ||
1+(-1)=0,在原码形式中,用1的原码加-1的原码: | 1+(-1)=0,在原码形式中,用1的原码加-1的原码: | ||
第42行: | 第44行: | ||
!数值1(正1) | !数值1(正1) | ||
!数值-1(负1) | !数值-1(负1) | ||
+ | !1-1(也就是1+(-1)) | ||
|- | |- | ||
|原码 | |原码 | ||
|0000 0001 | |0000 0001 | ||
|1000 0001 | |1000 0001 | ||
+ | |1000 0010 | ||
|- | |- | ||
|反码 | |反码 | ||
|0000 0001 | |0000 0001 | ||
|1111 1110 | |1111 1110 | ||
+ | |1111 1111 | ||
|} | |} | ||
正1的反码和负1的反码相加是:0000 0001+1111 1110=1111 1111,从反码来看,符号位不变,其他位按位取反,得到的原码就是1000 0000,也就是-0。 | 正1的反码和负1的反码相加是:0000 0001+1111 1110=1111 1111,从反码来看,符号位不变,其他位按位取反,得到的原码就是1000 0000,也就是-0。 | ||
第62行: | 第67行: | ||
!数值1(正1) | !数值1(正1) | ||
!数值-1(负1) | !数值-1(负1) | ||
+ | !1-1(也就是1+(-1)) | ||
|- | |- | ||
|原码 | |原码 | ||
|0000 0001 | |0000 0001 | ||
|1000 0001 | |1000 0001 | ||
+ | |1000 0010 | ||
|- | |- | ||
|反码 | |反码 | ||
|0000 0001 | |0000 0001 | ||
|1111 1110 | |1111 1110 | ||
+ | |1111 1111 | ||
|- | |- | ||
|补码 | |补码 | ||
|0000 0001 | |0000 0001 | ||
|1111 1111 | |1111 1111 | ||
+ | |(1) 0000 0000 | ||
|} | |} | ||
− | '''<u> | + | '''<u>补码:正数的补码与源码相同,负数的补码是其反码的基础上末位加1(符号位不变)。</u>''' |
正1的补码和负1的补码相加是:0000 0001+1111 1111=(1) 0000 0000,但是计算机取固定8位字长,进位的1就被丢弃掉了,得到后面的 0000 0000。 | 正1的补码和负1的补码相加是:0000 0001+1111 1111=(1) 0000 0000,但是计算机取固定8位字长,进位的1就被丢弃掉了,得到后面的 0000 0000。 | ||
第82行: | 第91行: | ||
− | '''<u> | + | '''<u>移码:补码的基础上符号位按位取反</u>''' |
+ | {| class="wikitable" | ||
+ | |+ | ||
+ | ! | ||
+ | !数值 | ||
+ | ! | ||
+ | ! | ||
+ | |- | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |} |
2024年3月13日 (三) 12:57的版本
https://www.bilibili.com/video/BV13U4y1E7oA/?p=5
考点2:码制(原码/反码/补码/移码)
原码:最高位是符号位,其余低位表示数值的绝对值。
比如:
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
---|---|---|---|---|---|---|---|
高 | 其余低位 |
数值1(正1) | 数值-1(负1) | 1-1(也就是1+(-1)) | |
---|---|---|---|
原码 | 0000 0001 | 1000 0001 | 1000 0010 |
1+(-1)=0,在原码形式中,用1的原码加-1的原码:
0000 0001+ 1000 0001=1000 0010,符号位是1,表示负号,数值位绝对值是2,是-2,所以在计算机中做具体运算时,并不使用源码进行运算。
实际用补码进行加减、运算。
反码:正数的反码与原码相同,负数的反码是其绝对值按位取反(符号位不变)。
数值1(正1) | 数值-1(负1) | 1-1(也就是1+(-1)) | |
---|---|---|---|
原码 | 0000 0001 | 1000 0001 | 1000 0010 |
反码 | 0000 0001 | 1111 1110 | 1111 1111 |
正1的反码和负1的反码相加是:0000 0001+1111 1110=1111 1111,从反码来看,符号位不变,其他位按位取反,得到的原码就是1000 0000,也就是-0。
真正记数的时候,只有一个0,没有负0的说法。
为什么说补码运算是正确的呢?
数值1(正1) | 数值-1(负1) | 1-1(也就是1+(-1)) | |
---|---|---|---|
原码 | 0000 0001 | 1000 0001 | 1000 0010 |
反码 | 0000 0001 | 1111 1110 | 1111 1111 |
补码 | 0000 0001 | 1111 1111 | (1) 0000 0000 |
补码:正数的补码与源码相同,负数的补码是其反码的基础上末位加1(符号位不变)。
正1的补码和负1的补码相加是:0000 0001+1111 1111=(1) 0000 0000,但是计算机取固定8位字长,进位的1就被丢弃掉了,得到后面的 0000 0000。
通过符号位来看,是一个正数,它的数值位——正数的原码、反码、补码都是一样的。0000 0000就是0。
移码:补码的基础上符号位按位取反
数值 | |||
---|---|---|---|