打印
[ARM入门]

溢出类型及表现

[复制链接]
2638|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呐咯密密|  楼主 | 2024-4-19 11:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、溢出

只有符号的数才会发生溢出。对于signed整型的溢出,C的规范定义是“undefined behavior”,也就是说,编译器爱怎么实现就怎么实现。对于大多数编译器来说,仍然是回绕。

2、回绕

无符号数会回绕(常绕过一些判断语句)。对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8* sizeof(type))作模运算”,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模。例如:

unsigned char x = 0xff;
printf("%d\n", ++x);


上面的代码会输出:0 (因为0xff + 1是256,与2^8求模后就是0)

3、截断

将一个较大宽度的数存入一个宽度小的操作数中,高位发生截断


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

497

主题

3881

帖子

47

粉丝