打印

关于整数溢出的问题

[复制链接]
1920|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
batilin|  楼主 | 2008-3-22 00:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在c语言中,有符号整数相加溢出的问题是可以检测的,但是无符号整数相加溢出却不知道怎么检测。
比如:unsigned int i1, i2;
怎么检测 i1 + i2 的结果溢出了?
当然在汇编里面,是很容易的,用ADDS指令,再查询CPSR寄存器的进位标志位C就可以知道结果是否溢出。但是,在c语言中如何访问CPSR寄存器?你可能想到嵌入汇编,然后查询CPSR寄存器。可是,当我查看反汇编的指令时,发现ARM C编译器把 i1 + i2 编译成 ADD R3,R2, R1;  而不是ADDS!也就是说,相加结果并不改变进位标志位,即使嵌入汇编,查询CPSR寄存器也是没有用的。
望各位指教,谢谢。

相关帖子

沙发
阿南| | 2008-3-22 09:20 | 只看该作者

通常都是自己处理

使用特权

评论回复
板凳
sz_kd| | 2008-3-22 09:41 | 只看该作者

要加判断语句判断是否溢出

使用特权

评论回复
地板
lhzw2001| | 2008-3-26 22:17 | 只看该作者

if ((i1+i2)>溢出值)

使用特权

评论回复
5
computer00| | 2008-3-26 23:35 | 只看该作者

if((i1+i2)

使用特权

评论回复

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

本版积分规则

16

主题

22

帖子

1

粉丝