(unsigned)char 类型范围思考 -128 -0 -129 原反补码

TITLE:

  面对char 首先想到的是,一个字节,8个比特位,伴随char的除了0~255这个范围外还有-128~127 这两个数字,来记录一下自己的理解

char占一个字节,再二进制表示中值域为:0000 0000

~1111 1111  ,十进制数就是0~255

如果把char类型当作有符号类型,需要把最高位当作符号位,实际能表示大小的位置只有7个二进制位

2^7=128,但是范围是 -128~127 不够对称,这里面还有细节

先来看正数:

正数要求符号位为0   剩下7位

最小为 0:二进制:0 000 0000

最大为 127: 二进制: 0 111 1111 

对于负数,我们从0开始向下退,(从原码开始推)

正数0的下一位为负数,符号位为1

二进制:1 000 0000 (源码),然后呢,乍一看,第一个1代表负号,后面数值大小为0,所以这个数应该是 -0   ,,哈哈哈,但是这样是错的

不急、我们再往下推一个

二进制: 1 000 0001 (原码),最高位为1代表负号,数值大小为1 ,所以这个数为 -1

再推一个

二进制: 1 000 0010 (原码),这个数为 -2

最后。。。

二进制: 1 111 1111 (原码),这个数为 -127 (

在理解了这个之后,我们再来介绍 -0  -128 这两个奇奇怪怪的东西

1.原码反码补码理解

我靠,刺激,,,关于-128的原反补码,我们不要局限于1一个字节,放在 int(或者两个字节) 里面来看看,别有洞天。

 

 但是char类型只有8个比特位,所以会将高位截除,所以截除之后:

 

造成了 -0 和 -128 的原码一样的假象!,,所以不是规定-0不存在,应该就是本来就不存在, 

理解应该上了一个层次。

稍微扩展

如果要在 signed char 里面硬塞进去 -129 ,解决方法一样,从大的字节来,然后对高位进行截除。

 

奇怪的理解有增加了是不是,宝贝们,留个收藏关注,不然下次找不到 

2.画图理解

 画一个顺时针的大圆,从0开始,顺时针对二进制依次加1,(原码)可以发现,其实这个圆是完整且有序并且好看的,,根本就没有 -0 什么奇奇怪怪的东西的!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值