您的位置 首页 观点

第18节:加法运算的溢出

从业十年,教你单片机入门第18讲:我前面介绍的三种数据类型unsignedchar,unsignedint,unsignedlong,都是有最大范围限制的,它

从业十年,教你单片机入门 第18讲:

我前面介绍的三种数据类型unsigned char ,unsigned int ,unsigned long,都是有最大规模约束的,它们最大规模分别是255,65535,4294967295,假如加法运算的成果超过了参加运算的变量自身,会呈现什么成果,有什么规则,这便是本节要解说的溢出问题。

(1)何谓溢出?比方以下比如:

unsigned char a;

a=0x8536;

剖析:

因为a是unsigned char变量,位数是8位,也便是1个字节,而0x8536是16位,2个字节,这种情况下,把0x8536赋值给单字节变量a,变量a只能接收到最低位的一个字节0x36,而高位字节的0x85就被丢掉了,这个便是本节所说的“溢出”了。

(2)再看一个比如如下:

unsigned char b=0xff;

b=b+1;

剖析:

b默认值是0xff,再加1后,变成了0x0100保存在一个躲藏的中心变量,然后再把这个中心变量赋值给单字节变量b,b只能接收到低位字节0x00,所以运算后b的数值因为溢出变成了0x00。

(3)再看一个比如如下:

unsigned char c=0xff;

c=c+2;

剖析:

c默认值是0xff,再加2后,变成了0x0101保存在一个躲藏中心变量,然后再把这个中心变量赋值给单字节变量c,c只能接收到低位字节0x01,所以运算后c的数值因为溢出变成了0x01。

(4)再看一个比如如下:

Unsigned int d=0xfffe;

d=d+5;

剖析:

d默认值是0xfffe,再加5后,变成了0x10003保存在一个躲藏中心变量,因为这个躲藏的中心变量是unsigned int类型,只能保存2个字节的数据,所以在中心变量这个环节就溢出了,实践上躲藏的中心变量只保存了0x0003,然后再把这个中心变量赋值给双字节变量d,d天经地义也是0x0003。

(5)再看一个比如如下:

unsigned long e=0xfffffffe;

e=e+5;

剖析:

e默认值是0xfffffffe,再加5后,变成了0x100000003保存在一个躲藏中心变量,因为这个躲藏的中心变量是unsigned long类型,只能保存4个字节的数据,所以在中心变量这个环节就溢出了,实践上躲藏的中心变量只保存了0x00000003,然后再把这个中心变量赋值给4字节变量e,e天经地义也是0x00000003。

现在编写一个程序来操练上述前面4个比如,最终把程序编译后下载到坚鸿51学习板调查成果。请直接仿制第十节模板程序,修正的main程序代码如下:

void main() //主程序

{

/*—C言语学习区域的开端—————————————————————————*/

unsigned char a;

unsigned char b=0xff;

unsigned char c=0xff;

unsigned int d=0xfffe;

a=0x8536;

b=b+1;

c=c+2;

d=d+5;

GuiWdData0=a; //把变量a这个数值放到窗口变量0里边显现

GuiWdData1=b; //把变量b这个数值放到窗口变量1里边显现

GuiWdData2=c; //把变量c这个数值放到窗口变量2里边显现

GuiWdData3=d; //把变量d这个数值放到窗口变量3里边显现

/*—C言语学习区域的完毕—————————————————————————*/

while(1)

{

initial();

key_service();

display_service();

}

}

如安在坚鸿51学习板上调查a,b,c,d这4个变量的十六进制?按下S1或许S5按键即可切换显现不同的窗口,然后显现不同的变量,只需按住S9按键不放,此刻显现的便是该变量的十六进制。上坚鸿51学习板调查程序履行的成果如下:

变量a为0x36。

变量b为0x00。

变量c为0x01。

变量d为0x0003。

这一节提到了一个“躲藏中心变量”的概念,这个奥秘的“躲藏中心变量”到底是unsigned int类型仍是unsigned long类型?有什么规则?假如运算中存在多种不同变量类型该怎么办,实践使用中有处理的方法吗?预知概况,请看一节内容。

下节预告:加法运算中,奥秘中心变量的类型以及处理“掺杂多种变量类型”的方法。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/262143.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部