首页 > 试题广场 >

F、G、X 都是32位有符号整数,F=X2,G=X1,

[不定项选择题]
F、G、X 都是32位有符号整数,F=X/2,G=X>>1,如果 F != G,那么:
  • 编译错误
  • X 是奇数
  • X 是负数
  • F-G=1
  • G-F=1
(数据在计算机中以二进制的形式存储)举个例子验证该题的结果,假设x=-3,其32位的补码省略前24位得到的后8位是 1111 1101,X>>1得到的结果是1111 1110(负数右移,高位自动补1),其十进制值为-2,则G=-2。 X/2的结果为-1.5,但由于是整数故省去小数部分后得到F=-1。所以x为负数,且为奇数,F-G=1; 题中B、C、D满足。
编辑于 2017-03-16 11:05:57 回复(5)
1.当X为奇数,并且是负数时,-5/2=-2,-5二进制为1101,右移一位是1110是-6,-6/2=-3,-2-(-3)=1.
 2.当X为偶数,并且是负数时,-4/2=-2,-4二进制为1100,右移一位是1110是-6,-6/2=-3,-2-(-3)=1. 
3.当x为正数时都不满足条件
发表于 2015-08-21 10:44:35 回复(9)
好像没有人提到带有符号位的右移操作的两种,一种逻辑移位操作和算术移位操作:

在微软的VC6.0和VS2008编译器都是采取算术称位即算术移位操作,算术移位是相对于逻辑移位,它们在左移操作中都一样,低位补0即可,但在右移中逻辑移位的高位补0而算术移位的高位是补符号位。
因为15=0000 1111(二进制),右移二位,最高位由符号位填充将得到 00 00 0011即3。-15 = 1111 0001(二进制),右移二位,最高位由符号位填充将得到 11 11 1100即-4(见注1)。
发表于 2016-10-09 21:58:14 回复(0)
我认为这道题描述的现象就是负奇数在进行 "/2" 和 ">>1" 时的差异
产生的原因在于进行除2时,我们知道两个整型进行除法运算,系统会默认忽略掉(而不是四舍五入)小数部分
因此类似-3.5,-4.5这类数字就变成了-3,-4
因此差生了与>>1不同的结果
发表于 2016-02-24 21:44:22 回复(0)
X>>1的结果会截断为整数,X/2的结果会四舍五入为整数

发表于 2018-07-10 22:31:55 回复(0)
总结:移位需要考虑个位数0/1 而除法无论是什么都是向下取整【不强转的话】
编辑于 2018-03-13 15:49:33 回复(0)
这道题可以使用特殊值法,可以取X=3,-3,就可以计算出答案,需要注意的是负数在计算机中是以补码的形式存储的,所以在移位的时候需要谨慎。
发表于 2017-10-12 21:34:41 回复(0)
x=5不就成立了吗?

发表于 2016-03-23 20:21:49 回复(0)
楼上的把补码的求法取反加一都省了么
发表于 2015-09-09 21:17:12 回复(0)
当x=-5时,-5补码(前面28位省略):1101

F=-5/2=-2     F补码:1110
G=X>>1       G补码:1101  G=-3

所以,F-G=1
要选
BCD
发表于 2015-08-26 16:18:31 回复(0)
答案:C
右移一位对正数来说相当于除以2,这里F!=G,说明X是负数
发表于 2015-01-10 10:16:19 回复(2)