首页 > 试题广场 >

设x和y均为int型变量,则以下语句: x+=y; y=x

[单选题]
设x和y均为int型变量,则以下语句:
x+=y;
y=x-y;
x-=y;
的功能是?
  • 把x和y按从大到小排列
  • 把x和y按从小到大排列
  • 无确定结果
  • 交换x和y中的值
正确答案为 D 第一条语句:x += y;此时x为x、y之和 第二条语句:y = x - y; 将原来x的值赋值给y 第三条语句:x -= y; 此时的y为原来的x,所以表达式最终结果为原y,并将y赋值给x。 所以,该程序的功能是实现x,y的互换 还有一种方法如下: i = x; x = y; y = i; 与上面这种方式相比的好处是不需要开辟第三个变量,节省了空间
发表于 2018-03-09 11:14:47 回复(0)
补充
防溢出的交换办法
x = x ^ y;
y = x ^ y;
x = x ^ y;
举例 x = 8 y = 3
写成二进制 x = 1000 y = 0011
x =  x ^ y = 1000 xor 0011 = 1011
y =  x ^ y = 1011 xor 0011 = 1000
x =  x ^ y = 1011 xor 1000 = 0011

发表于 2020-03-10 15:48:00 回复(6)
这题应该是C,超int后就不能实现交换的功能了
发表于 2020-09-04 14:13:08 回复(0)
溢出?考虑过吗?真无语
编辑于 2022-03-29 10:43:40 回复(0)
D
发表于 2018-03-12 21:20:12 回复(0)
第一条语句后的结果:x:x+y;y:y;
第二条语句后的结果:x:x+y;y:x;
第三条语句后的结果:x:x;y:x;
所以最终x和y都等于x,那么结果ABD肯定都是错的,虽然C也描述的不清楚,但是只能选这个了。
发表于 2018-03-08 09:12:57 回复(1)
属于面试官看一眼就知道是水货的水平
编辑于 2022-03-13 21:27:59 回复(0)
代数
发表于 2021-05-31 09:59:35 回复(0)
这题应该是c,没有限定取值范围
发表于 2021-03-15 22:24:09 回复(0)
注意赋值的前后变化
发表于 2020-02-29 13:56:57 回复(0)
有没有考虑到越界的问题,觉得是C
发表于 2019-04-09 10:51:33 回复(0)
直接带进去 x=1 y=2试下,ab 选项直接忽略,见过两个数排序还这么麻烦的吗。
发表于 2018-05-09 17:44:47 回复(0)
d
编辑于 2018-02-26 23:52:41 回复(0)
d
编辑于 2018-02-26 17:07:22 回复(0)
交换x和y的值
发表于 2018-02-24 21:11:59 回复(0)