void swap_int(int *a, int *b){ *a = *a + *b; *b = *a - *b; *a = *a - *b; } int m = 2112340000, n = 2100001234; swap_int(&m, &n);
结果不正确,因为会溢出,用位与的方式就没问题
结果正确,即使会溢出
结果正确,不会溢出
其他选项都不对
以signed char为例 a=127 b=1为例
a=a+b时 溢出 此时 a=-128
b=a-b -128-1溢出 b=127
a=a-b -128-127 溢出 为1仍然能正确交换。
可以用4bit模拟,溢出了就为正
当同符号相加的时候不能保证结果一定不会溢出,因为总位数是一定的,两个最大值或者两个最小值相加一定会出问题
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题