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仍然能正确交换。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题