首页 > 试题广场 >

下面可以检测运算过程中出现整型溢出的办法有()

[不定项选择题]
下面可以检测运算过程中出现整型溢出的办法有()
  • 将运算结果和可以表示的最大整数进行比较
  • 检测符号位的变化
  • 将计算结果减去加数看是否与另一加数相等
  • 比较参数的长度
选项1 : 运算结果进行比较的话,已经溢出导致结果变化,去比较也为时已晚。 所以不正确
选项2 : 检测符号为变化可以防止符号溢出,正确。
选项3 : a+b = c   c - a != b 则c溢出 正确
选项4 : 参数长度    0000000000000000000000000 这个长度算溢出么 不正确

发表于 2019-03-20 10:59:38 回复(8)
其实c选项不太对,整型加减构成的是一个群,那么就一定有 (a+b)- a = b  无论这个过程中是否发生溢出,可参考计组教材
发表于 2020-04-20 17:55:45 回复(1)

“将计算结果减去加数看是否与另一加数相等”这个选项,是错的,比如


#include<stdio.h>
int main(){ 
        unsigned char a=255; 
        unsigned char b=1; 
        unsigned char c; 
        c=a+b; 
        b=c-a; 
          printf("c:%d b:%d\n",c,b); 
        return 0; 
        }

把unsigned char改成char也一样是错的。

编辑于 2019-05-02 10:24:57 回复(4)
检测符号位变化也不一定对,比如两个非常大的数字相乘,越界可能还是正数。
java int 型实测
发表于 2019-09-11 18:26:02 回复(2)
C选项根本无法判断好吧!!!

发表于 2022-05-27 17:21:41 回复(0)
其实只是可能检测出来吧,像int的加减法,内部就是一个循环,减去一个数绝对是另一个数
发表于 2021-07-17 16:52:16 回复(0)
题目写的是可以考虑的办法?为什么要用特殊情况说事?感觉题目出的也不咋地
发表于 2020-02-19 10:00:59 回复(0)
我不知道题目是不是不够严谨,可以考虑的办法,能想得到的不都是吗,2位数乘2位数至少是3位数(就以10进制说),这不就溢出了嘛,选项D也不是没有道理吧。
发表于 2019-11-20 21:52:21 回复(0)
问题,符号位检测感觉有可能出错,溢出不一定溢出一位,溢出几位,那么符号位数据可能相同?
发表于 2019-11-13 17:23:37 回复(2)
搞不懂哦
A. 将运算结果和可以表示的最大整数进行比较:如果运算结果大于最大整数,则发生了溢出。
 B. 检测符号位的变化:如果符号位发生了变化,则发生了溢出。例如,正数加正数结果变为负数,负数加负数结果变为正数。 
C. 将计算结果减去加数看是否与另一加数相等:如果结果减去加数等于另一加数,则发生了溢出。这是因为溢出后的结果会回到原来的加数。 
D. 比较参数的长度:如果参数的长度不同,可能会导致溢出。例如,对于两个32位整数相加,结果可能会溢出到33位,无法用32位整数表示。
编辑于 2023-11-13 15:08:34 回复(0)
看了大家的评论,我发现我想的少,所以这题我做对了。死扣理论精确性,不是一个程序员该追求的。
发表于 2023-04-15 08:58:28 回复(0)
c选项有问题把
如果最大正整数为126,最小负数为-125
那126+1等于-125
-125-1=126
没区别啊
发表于 2020-09-03 18:24:26 回复(2)
4位的机器
(1111)b + (1111)b = (11110)b
最高位的1被丢弃
=(1110)b
符号位不变,B选项错误。
要使用双符号位才能正确检测溢出。
发表于 2022-12-16 22:05:10 回复(0)
无符号越界也变号吗
发表于 2020-11-25 20:32:43 回复(1)
怎么感觉是溢出之后检测是否溢出的措施,而不是避免溢出的方法啊。
发表于 2020-06-05 21:13:49 回复(0)
C选项 “将计算结果减去加数看是否与另一加数相等”,
如果用计算机来减,我测试是一样的啊。
如果是人自行来减,那有什么意义吗?

求解答 ~
发表于 2019-10-22 10:22:09 回复(1)