有关signed关键字的那些事

提到signed,相信大家都不陌生了吧,有关signed的作用,此处不再过多赘述,今天想带大家了解的是数据类型加上signed之后数据类型的取值范围,有人会问了,啊,这个不是很简单吗,你有什么讲头呢?既然大家都这么说了,那我先问大家一个问题吧,signed char类型所能存储的数据的范围是多少?(以char类型为例,其它类型是同理)哎,有人就回答了,不就是-128到127吗,这有什么难的呢,这不是常识嘛,那接下来我问你,char类型在内存中占据一个字节,有8个bit位,所表示的范围用二进制位很容易可以表示为1111 1111------0111 1111,唉,你就简单一浏览,觉得没问题啊,就是这么写的啊,可是我们仔细一看,哎,发现问题了,什么问题呢?请看下一段!

1111 1111转化为十进制数为-127,0111 1111转化为十进制数为127,哎,我这仔细一想,它不对啊,哎,我说,年轻人你大意了,照你这么想,这不是才表示了255个数表示范围为-127到127嘛,那-128去哪了呢?哎,它没了吧,所以啊,我就劝年轻人耗子尾汁啊,希望大家能够注意到这个点,平时也应当关注这些小的细节,好了,言归正传,下面将带大家了解一下这个。

我们首先先看-128
源码形式 1 1000 0000(第一位为符号位,第二位表示2^7即128
反码形式 1 0111 1111(符号位不变,其它位按位取反)
补码形式 1 1000 0000(一共九位)
从这可以看出,-128的存储形式即补码形式为九位,但我们的内存空间只有8位,那么必然有一位在存入空间使丢失了,我们称之为被截断了,我的计算机是小端存储,是低位先被压入空间中,所以最高位即符号位被截断了(这个是个人猜想,不代表准确认知,如果大家认为有错还请指出),然后就得到了大家所了解的1000 0000即-128,那么同学们就会问了,计算机这样搞,我们取的时候怎么办呢?这个就不需要大家担心了,这个地方有一个特殊的规定,即计算机把1000 0000从补码转换为十进制使,会自动的将其转换为-128,这个有关于-128的这些问题大家可以认为是半计算半规定,计算体现在存储的过程中,规定体现在取出的过程中,事实上,1000 0000也是刚才我们举出的-127----127之外剩下的唯一的一个二进制数,也有人称之为-0,事实上大家记住这个结论即可,即-128的存储形式为1000 0000,但如果大家想成为一个真正优秀的程序员,我觉得这个还是有必要了解一下的。

 今天的分享先到这,后续还会出一些相关的习题及讲解,希望大家能够持续关注,如果觉得今天的分享对你有用的话,点一个小小的赞可以吗?

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹿九丸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值