网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

字符型变量的存储和取值-创新互联

目录

华容ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

1.问题引入

2.字符型变量的存储

3.字符型变量的取值

4.字符型变量中的-128

5.取值转换图


1.问题引入

  我们知道,在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呢?遗憾的是,由于数据发生的截断,所以无法正确的转化回来。具体过程如下:

显然,最后转化后的原码并不是-128。所以我们可以说在字符型数据中1000 0000表示-128是一种半计算半规定的方式。因此以后我们在字符型变量中看到1000 0000,不必再进行转化,可以将其直接看成-128。

5.取值转换图

  综上,我们可以得出一个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元起,快前往官网查看详情吧


网页题目:字符型变量的存储和取值-创新互联
转载注明:http://bjjierui.cn/article/dopisc.html

其他资讯