大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
文章目录
补码的加减运算
变补(求补)
溢出判断
采用变形补码
原码的加减运算
移码的加减运算
补码的加减运算
运算公式:
[A+B]补 = [A]补 + [B]补 (mode 2n)
[A-B]补 = [A]补 + [-B]补 (mode 2n)
规则:
加减运算统一,全用加法运算
符号位和数值位参加运算
变补(求补)
这里引出一个概念,《变补》,根据上面A减B的补码等于A的补码加负B的补码,为了描述方便,也可以表述为A减B的补码等于A的补码加B的变补,这样描述,直接用A和B,不用A和-B,更加直观。
[X]变补 = [-X]补
变补类似补码,变补是全部取反再加1,无符号位一说
实现减法的工作,主要在于求-B的补码([-B]补=B全部取反+1)
溢出判断
假定是4位
计算(-7)+(-6)
-7的补码是1001,-6的补码是1010
1001加1010得1 0011,取后4位,结果是3。
总结溢出现象:
最高位和次高位的进位不同,上面最高位进位1,次高位进位0
和的符号位和加数的符号位不同
计算(-3)+(-5)
-3的补码是1101,-5的补码是1011
1101加1011得1 1000,结果是-8。
正确,最高位和最低位进位都是1,和得符号位和加数得符号位都是1。
采用变形补码
变形补码是为了保留中间结果
机器里,在做运算的过程当中,多添一个(或两个)符号位,这种由添符号位而得到的补码就是变形补码
假定4位,计算6+5
6的补码是0110,5的补码是0101,相加得到是1011,结果是-5,错误。
如果用两个符号位表示,对应的变形补码是01011,第一个符号位表示符号,第二个符号位作为数值部分,结果是11。
溢出判断:
结果的两个符号位不同
原码的加减运算
规则:
符号位和数值部分分开处理
仅对数值部分进行加减运算,符号位起判断和控制作用
加法:同号求和,异号求差
减法:异号求和,同号求差
求和:
数值位相加
符号取被加数(被减数)的符号。
最高位有进位表示溢出
求差:
被加数(被减数)加上加数(减数)的变补
最高数值位产生进位表示结果为正,所得数值位正确
最高数值位没有产生进位表示结果为负,对结果求补,还原为绝对值形式的数值位
最高数值位产生进位,符号取被加数(被减数)的符号。
最高数值位没有产生进位,符号取被加数(被减数)的符号取反。
例如:
(+4) – (-2)
符号位异号,做减法,所以求和
数值位相加4+2=6
符号取4的符号(+)
结果是(+6)
又如:
(-2)-(-4)
符号位相同,做减法,所以求差
2的原码是0010,4的变补是1100,两数相加0 1110。
无进位,对1110求补,0010,值为2
符号取2的符号取反,(+)
结果是(+2)
移码的加减运算
运算公式:
[A]移+[B]移 = [A+B]补 (mode 2n)
[A]移-[B]移 = [A-B]补 (mode 2n)
推导过程:
[A]移+[B]移
= 2n-1+A+2n-1+B
= 2n+A+B
= [A+B]补
[A]移-[B]移
= [A]移+[-[B]移]补
= 2n-1+A+2n-[B]移
= 2n-1+A+2n-2n-1-B
= 2n+A-B = [A-B]补
运算公式2:
[A+B]移 = [A]移+[B]移-2n-1
[A-B]移 = [A]移-[B]移+2n-1
推导过程:
[A+B]移
=A+B+2n-1
=A+2n-1+B+2n-1-2n-1
=[A]移+[B]移-2n-1
[A-B]移
=A-B+2n-1
=(A+2n-1)-(B+2n-1)+2n-1
=[A]移-[B]移+2n-1
= [A]移+[-[B]移]补+2n-1
=[A]移+[[B]移]变补+2n-1
溢出判断:
A与B的符号位相同,且与所得的结果的符号位也相同时,发生溢出
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180169.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...