有符号数表示

简介:

首先我们都应该知道的是 当一个数是有符号的时候 比如int(16位)、char(8位)、long(32位),无符号 在前面加上unsigned 便可。

就拿char(8位来说) 7表示为 00000111 ;-7表示为 11111001;怎么转换呢?

很简单,正数的补码是自身,负数的补码是取反再加1,上面取反+1之后 00000111。

容易理解吧?简单的就是说,有符号数是用补码形式表示的。

为什么要用补码呢?

因为补码有一个好处,加法可以直接相加,而不用判断符号位。

就拿上面的 7 和 -7 相加 那么结果就是00000000 就是零。7 + (-6)呢? -6为(相应的,变为有符号表示为,无符号-1,再取反,为11111010) 相加的结果是 00000001。 同理 7 +(-8),结果是11111111,结果是-1。

应用:

现在是八位,如果一个六位的有符号数怎么办呢?

计算机格式已经规定死了(8、16、32位),6位的话,我就就用8位来表示。

怎么表示? 很简单,其他两位当做符号扩展(现在6位的话,符号位在第六位,符号扩展的意思是,如果第六位是1那么7 8 位也为1 ,否则为0) 让我们看看效果。就那上面的 -7 来说,6位应该是111001,符号扩展后为11111001 用char显示 为-7。

这个有什么用,简单就是硬件中的数据传输,有时候需要传送多个数据,a1、a2、a3等,不想传完 a1 再 a2 ,之后需要将数据打包成

a1 + a2 + a3 位 然后再解包,然后再还原为有符号型的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值