Java教程

第6讲 计算机中数的表示与运算

本文主要是介绍第6讲 计算机中数的表示与运算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文作于2022.1.22,用于本人加深记忆

一、原码

最高位为符号位,其余为真值部分。即[X]原=符号位+|绝对值|
①优点:真值和其原码表示之间的对应关系简单,容易理解
②缺点:计算机中用原码进行加减运算比较困难;0的表示不唯一。

8位数0的原码:
+0=0 0000000
-0=1 0000000
数0的原码不唯一

二、反码

对一个机器数X:
若X>0 ,则 [X]反=[X]原
若X<0, 则 [X]反= 对应原码的符号位不变,数值部分按位求反。

例:X= -52=-0110100
[X]原=1 0110100
[X]反=1 1001011

[+0]反=[+0]原= 00000000
[-0]原=10000000
[-0]反=[-0]原数值部分分按位取反= 11111111
数0的反码不唯一

三、补码

对一个机器数X:
若X>0, 则[X]补=[X]反= [X]原
若X<0, 则[X]补=[X]反+1

例:X= – 52= – 0110100
[X]原=10110100
[X]反=11001011
[X]补= [X]反+1=11001100

[+0]补=[+0]原=00000000
[-0]补=[-0]反+1=11111111+1=00000000(多出来的一位1被舍掉,但注意不能随便舍,其决定二进制数正负)
[+0]补=[-0]补
数0的补码唯一

补码实现了实现将减法运算转换为加法运算
即:
[X+Y]补=[X]补+[Y]补
[X-Y]补=[X+(-Y)]补 =[X]补+[-Y]补

例1:66-51=66+(-51)=15
[+66]补= [+66]原= 01000010
[-51]原=10110011    [-51]补=11001101
[+66]补+ [-51]补= 0 00001111(0代表为正数,并且舍去)=00001111=15

例2:X=-52=-0110100,Y=116=+1110100,求X+Y=?
[X]原=10110100(注意题目X只有7位,因为为负数,最高符号位为1)
[X]补= [X]反+1=11001100
[Y]补= [Y]原=01110100
[X+Y]补= [X]补+ [Y]补=11001100+01110100=0 1000000(0代表为正数,并且舍去)=+1000000

现代计算机系统中,程序设计时,负数可用“-”表示,由编译系统将其转换为补码。

四、计算机能力的局限性

①无符号整数的表示范围

无符号整数的表数范围:0 ≤ X ≤ 2^n-1
当最高位向更高位有进位(或借位)时则产生溢出

②有符号整数的表示范围

原码和反码:-(2^(n-1) -1) ≤ X ≤ 2^(n-1) -1
补码:-2^(n-1)  ≤ X ≤ 2^(n-1) -1

对8位二进制数:
原码: -127 ~+127
反码: -127 ~+127
补码: -128 ~+127

两个有符号二进制数相加或相减时,若运算结果超出可表达范围,则产生溢出
最高位进位状态⊕次高位进位状态=1,则结果溢出
除法运算溢出时,产生"除数为0"中断
乘法运算无溢出问题

例:若:X=01111000, Y=01101001,求问X+Y是否溢出

 明显最高位进位状态⊕次高位进位状态=1,产生溢出

五、符号二进制数与十进制的转换

对正数:补码=反码=原码,且原码=符号位+真值

对负数:需对[X]补再取补才能得到真值,且原码=符号位+真值

注意,有可能真值为一个负数,加上符号位反而变正,例如补码数A8H为一个负数,且它求补码以后得到的是1101 1000,由于最高位为符号位,其真值为-101 1000,再加上符号位的负号,补码数A8H对应的原码为0101 1000B=88

这篇关于第6讲 计算机中数的表示与运算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!