扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
目录
华容ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!1.问题引入
2.字符型变量的存储
3.字符型变量的取值
4.字符型变量中的-128
5.取值转换图
我们知道,在C语言中,一个字符型数据占8个bit位,那么当我们定义一个字符型数据,我们需要给它赋上什么范围的值才合适呢。是[-127,127],还是[-128,127],亦或者是[-127,128]?下面就让我们进入本篇文章的内容:字符型变量的存储和取值。
2.字符型变量的存储将字符变量存储到内存中中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII 码放到内存中。因此它的存储形式就与整数的存储形式类似。不同的是,字符型数据占8个bit位,而整形数据占32个bit位,比特位的位数不同也就说明着它们的取值范围不同,如果对字符型数据的赋值超过了所能表示的范围,则数据将会发生截断,导致出错。例如:
我们定义一个字符数据
char c=10;
由于在计算机中数据是以二进制补码的形式存放,所以我们将整数10转化为二进制补码,然后取前8位放入c中进行存放,对应图解如下:
而如果我们定义了
char c=129 ;
那么其对应的存放图解如下:
我们可以发现,此时c的最终结果并不是129而是-127,说明129超出了字符型变量的表示范围,所以导致数据的存储出现了错误。
3.字符型变量的取值在将取值之前,先抛出一句我认为说得很好的一句话:
计算机所谓的特定数据类型能表示多少范围数据,取决于多少比特位的排列组合,比如4个比特位就一定可以表示2^4个数据,计算机绝对不会浪费任何一种组合。
根据这句话我们就可以先断定,一个字符型变量一定可以表示2^8,也就是256个数据。我们先按照符号位对字符型变量进行如下拆分:
按照以上分析,那么我们字符型变量的取值范围就是[-127,127]吗,实则不然。细心的小伙伴可能会发现,无论是上面还是下面,都有0这个数据的表示方式,分别为0000 0000和1000 0000;而在计算机中,我们当然不能让0有两种表示方式,否则会引起歧义。因此我们将0000 0000来表示0。而前面我们说过,计算机绝对不会浪费任何一种组合,所以,我们还需对1000 0000进行定义,赋予其意义。
我们不妨先来猜猜,1000 0000要表示什么呢?由于数据的取值范围肯定是连续的最好,所以我们可以在128和-128进行选取,又由于1000 0000最高位即符号位为1,所以我们猜测1000 0000代表-128。则字符型数据的表示范围就是[-128,127]。
4.字符型变量中的-128那么,为什么在字符型变量1000 0000代表-128呢?我们依旧来分析一下如下语句:
char c=-128;
我们知道,当我们定义了一个变量c时,编译器对c分配了8个bit位的内存空间,但是对于-128,它一开始并不是在变量c的内存空间中,是在寄存器中,需要先转化为二进制后,才能放入c中,因此我们可以得到以下图解:
我们可以发现,十分巧合的是,当-128在寄存器中转化为二进制补码后,截断存入c中时,存放的数据正是1000 0000,也就是我们上述所猜想的那样。
那如果我们将此时c中存放的1000 0000取出来,会不会还是-128呢?遗憾的是,由于数据发生的截断,所以无法正确的转化回来。具体过程如下:
5.取值转换图显然,最后转化后的原码并不是-128。所以我们可以说在字符型数据中1000 0000表示-128是一种半计算半规定的方式。因此以后我们在字符型变量中看到1000 0000,不必再进行转化,可以将其直接看成-128。
综上,我们可以得出一个8bit位的char类型变量所能表示的范围是[-128,127].如果超出了这个范围,就会发生截断,产生错误。根据以下转换图我们可以轻松得出截断后的数字:
例如以下两个例子
char c=128;
char c=-129;
对于例1,因为128=127+1,根据顺时针方向为正方向,则c最后的值就为127下一个数字-128 。
对于例2,因为-129=-128-1,所以需要取-128负方向也就是逆时针方向的下一个数字,则c最后的值就是127。
以上,就是本期的全部内容。
制作不易,能否点个赞再走呢qwq
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流