“软件设计师精讲 数据的表示 码制”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
第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>补码:正数的补码与源码相同,负数的补码是其反码末位加1(符号位不变)。</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>移码:补码的基础上符号位按位取反</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。


移码:补码的基础上符号位按位取反

数值