电话做网站的推广/新站如何快速收录
二进制运算
内容摘自 计算机组成原理第六章,与部分网络文章。
本片先考虑整数的情况,小数后续会有补充、
学校没学好的 到工作了都要补
计算机中参与运算的数有两大类:无符号数和有符号数
无符号
计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。当存放有符号数时,则需要留出位置存放符号。因此有符号的和没符号的所对应的数值不同。比如说32位 无符号0~4,294,967,295
有符号-2,147,483,648~ +2,147,483,647
有符号
用0表示正 1表示负
源码表示法
整数
整数源码定义为
[x]={0,x2n≥x≥02n−10≥x≥−2n[x]=\left\{ \begin{aligned} 0,x & & {2^n \geq x \geq 0}\\ 2^n-1 & & {0 \geq x \geq -2^n} \end{aligned} \right. [x]={0,x2n−12n≥x≥00≥x≥−2n
其中x 为真值,n为整数的位数。
例如
当x=+1110时[x]原=0,1110当 x= +1110 时 [x]_原 = 0,1110当x=+1110时[x]原=0,1110
当x=−1110时[x]原=24−(−1110)=1,1110当x = -1110 时 [x]_原= 2^4-(-1110)=1,1110当x=−1110时[x]原=24−(−1110)=1,1110
原码就其符号位加其本身
补码表示法
补码的概念
比如时钟,当时针指向6点 我需要 调到3点 有两种方式一种是 顺时针转9格,一种是逆时针转3格。假设顺时针转动为正逆时针转动为负则:
6−3=36+9=156-3 = 3\\ 6+9 =15 6−3=36+9=15
因为时钟只有12个小时且这个12在时钟是不显示的所以有15−12=315-12=315−12=3 所以15点为3点。这样-3和-9对时钟其作用是一样的。在数学上称12的模,写作mod12。称+9是-3以12为模的补数。
举A=9B=5求A−B(mod12)解:A−B=9−5=4对模12而言−5的补数为+7所以A−B=9+7=16对模12而言12自动忽略16等价与4即4≡16(mod12)进一步分析4≡16≡284≡4+12≡4+24举 A=9 B=5 求 A-B\pmod{12}\\ 解:\\ A-B=9-5=4\\ 对模12而言 -5 的补数为+7\\ 所以 A-B=9+7=16 \\ 对模12 而言 12自动忽略 16等价与4 即 4\equiv16\pmod{12}\\ 进一步分析 \\ \quad4\equiv16\equiv28\\ \quad4\equiv 4+12 \equiv4+24举A=9B=5求A−B(mod12)解:A−B=9−5=4对模12而言−5的补数为+7所以A−B=9+7=16对模12而言12自动忽略16等价与4即4≡16(mod12)进一步分析4≡16≡284≡4+12≡4+24
说明整数相对于“模”的补数就是正数本身。
这个概念可以用到任意模上
由此可以得出
- 正数的补数是它本身
- 负数的补数是模加上负数本身求得
- 一个正数跟一个负数互为补数时,它们绝对值之和即为这个模。
二进制补码
整数
整数源码定义为
[x]={0,x2n≥x≥02n+1+x0≥x≥−2n(mod2)[x]=\left\{ \begin{aligned} 0,x & & {2^n \geq x \geq 0}\\ 2^{n+1}+x & & {0 \geq x \geq -2^n} \pmod{2} \end{aligned} \right. [x]={0,x2n+1+x2n≥x≥00≥x≥−2n(mod2)
x为值,n为整数的位数。
例如:
当x = +1010时,
[x]补=0,1010[x]_补=0,1010[x]补=0,1010
当 x=-1101时,
[x]补=2n+1+x=100000−1101=1,0011[x]_补=2^{n+1}+x = 100000-1101=1,0011[x]补=2n+1+x=100000−1101=1,0011
推导:
x=−1011[x]补=24+1+x=100000−1011=1,0101现在把24+1改为25=11111+00001[x]补=11111+0001+x因为x是负数,若x用−x1x2x3x4表示,其中(xi)中不为0就为1于是[x]补=11111+00001−x1x2x3x4=11111−x1x2x3x4+00001=1xˉ1xˉ2xˉ3xˉ4+0001x=-1011\\ [x]_补=2^{4+1}+x\\ =100000-1011\\ =1,0101\\ 现在把2^{4+1} 改为2^5=11111+00001\\ [x]_补=11111+0001+x\\ 因为x是负数,若x用-x_1x_2x_3x_4表示,其中(xi)中不为0就为1于是\\ [x]_补\\ =11111+00001-x_1x_2x_3x_4\\ =11111-x_1x_2x_3x_4+00001\\ =1\bar x_1\bar x_2\bar x_3\bar x_4+0001x=−1011[x]补=24+1+x=100000−1011=1,0101现在把24+1改为25=11111+00001[x]补=11111+0001+x因为x是负数,若x用−x1x2x3x4表示,其中(xi)中不为0就为1于是[x]补=11111+00001−x1x2x3x4=11111−x1x2x3x4+00001=1xˉ1xˉ2xˉ3xˉ4+0001
由于负数−x1x2x3x4-x_1x_2x_3x_4−x1x2x3x4的源码为1,x1x2x3x41,x_1x_2x_3x_41,x1x2x3x4 所以负数求补数可以看为对每一位求反再+1
反码
整数
整数反码定义:
[x]={0,x2n≥x≥0(2n+1−1)+x0≥x≥−2n(mod(2n+1−1))[x]=\left\{ \begin{aligned} 0,x & & {2^n \geq x \geq 0}\\ (2^{n+1}-1)+x & & {0 \geq x \geq -2^n} \pmod{(2^{n+1}-1)} \end{aligned} \right. [x]={0,x(2n+1−1)+x2n≥x≥00≥x≥−2n(mod(2n+1−1))
x为值,n为整数的位数。
推导:
当x=+1101时,[x]反=0,1101当x=−1101时,[x]反=(x4+1−1)+x=11111−1101=1,0010当x=+1101时,\\ [x]_反=0,1101\\ 当x=-1101时,\\ [x]反=(x^{4+1}-1)+x=11111-1101=1,0010当x=+1101时,[x]反=0,1101当x=−1101时,[x]反=(x4+1−1)+x=11111−1101=1,0010
三种机器数值的最高位都为符号位。
当真值为正时,原码、补码、反码的表示形势均相同。符号位由0表示
当真值为负时,原码、补码、反码的表示形势均不同。符号位由1表示,而数值部分,反码为原码的每位求反,补码求反再加1。