补码编码及其转换计算

计算机整数表示有两种方式:无符号编码和有符号编码

无符号编码只能表示非负数,且Java语言不支持无符号编码

补码编码既能表示非负数又能表示负数,是机器默认的编码方式

也就是说,补码用来表示带符号的整数


n位二进制数可表示2^n个数

真值的取值范围:-2^(n-1)~2^(n-1)-1

为了表示符号,有符号编码将补码的最高位设为符号位,符号位为0表示正数,符号位为1表示负数

补码求真值

若补码开头为0,说明是正数,补码就是二进制数

若补码开头为1,说明是负数,开头加上负号,整体取反再加一

例如1110->-0010,真值为-2


真值求补码

若真值为正,那么补码就是真值的二进制表达

若真值为负,那么补码就是真值的二进制表达,去掉符号,整体取反再加一

例如-0101(-5)->1011,补码为1011


负整数的二进制表达转换成补码 

一般思路是负整数转换为二进制数再转换为补码,这里提供了一种直接转换的方式 

把负号变为1,对数字部分进行取反直到最后一个1(保留最后一个1),1后面的数不取反照抄

例如-3的二进制表达是-011->1101

补码转换成负整数的二进制表达

与上面操作类似

在补码前加负号,对数字部分进行取反直到最后一个1不再取反,1后面的数直接写下

例如-3的补码为1101->-0011

上面的两种转换本质上是一样的,只是求的方法不一样,都可以使用


有符号数转换成无符号数

若有符号数大于等于0则不需要转换

若有符号数为负数,则无符号数等于有符号数+2^n(n为位数)

无符号数转换成有符号数 

无符号数若小于2^(n-1,n为位数)则不需要转换

无符号数大于等于2^(n-1),则有符合数等于无符号数-2^(n-1)

有符号数和无符合数的范围

n个二进制位数时,都表示有2^n个数

有符号数:-2^(n-1)~2^(n-1)-1

无符号数:0~2^(n-1)-1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值