首页 > 试题广场 >

无符号整数变量ux和uy的声明和初始化如下: unsi

[问答题]
无符号整数变量ux和uy的声明和初始化如下:
unsigned ux = x;
unsigned uy = y;
若sizeof(int) =4,则对于任意int型变量x和y,判断以下关系表达式是否永真。若永真则给出证明;若不永真则给出结果为假时x和y的取值。
(1)(x*x)>=0                                                      (2)(x-1<0) || x>o
(3)x<0 || -x<=0                                                 (4)x>0 || -x>=0
(5)x&0xf! = 15 || (x<<28)<0                              (6)x>y==(-x<-y)
(7)-x+-y==-(x+y)                                               (8)(int)(ux-uy)==-(y-x)
(9)((x>>2)<<2) <=x                                           (10)x*4+y*8==(x<<20)+(y<<3)
(11)x/4+y/8==(x>>2)+(y>>3)                             (12)x*y==ux*uy
(13)x+y==ux+uy                                                (14)x*-y+ux*uy==-x
♦️1.不永真,平方和可能超出int型取值范围,溢出后 最高位是1时,就是负数了 ♦️2.不永真,设x等于-2147483648(TMin32)(int32位最小值)。那么,我们有x-1等于2147483647(TMaX32))(int32位最大值)。 ♦️ 3.永真,如果x是非负数,则-x是非正的。 ♦️ 4.不永真。设x为-2147483648(TMin32)。则-x补码各位取反再+1还为(TMin32),那么x和-x都为负数。 ♦️5. 不永真,这里!=的优先级比&(按位与)的优先级高。因此,若x=0,则x & 0xf != 15为0。(x<<28)<0 也为0,所以结果为假。♦️6. 不永真。当x=-2147483648、y任意(除-2147483648外),或者y=-2147483648、x任意(除-2147483648外)时不等。因为int型负数-2147483648是最小负数,该数取负后结果仍为-2147483648,而不是2147483648。♦️7. 永假。[-x]补=~[x]补+1,[-y]补=~[y]补+1,故~[x]补+~[y]补=[-x]补+[-y]补-2。 [-(x+y)]补=~[x+y]补+1,故~[x+y]补=[-(x+y)]补-1=[-x]补+[-y]补-1。 由此可见,左边比右边少1。♦️ 8. 永真。(int)ux-uy=[x-y]补=[x]补+[-y]补=[-y+x]补=[-(y-x)]补♦️9.永真,右移2位后,再左移两位,其实就等于将后两位置成0了。那么不管x是正数还是负数,后两位 变0都是比原来更小。如果后两位本来就是0,那就 相等。 ♦️10.永真,左移运算和乘法运算是等价的,如果乘法 溢出,移位也必定溢出,溢出后的值也相等 ♦️11.非永真。当x=-1或y=-1时,x/4或y/8等于0,但是,因为-1的机器数为全1,所以,x>>2或y>>3还是等于-1。此外,当x或y为负数且x不能被4整除或y不能被8整除,则x/4不等于x>>2,y/8不等于y>>3。♦️12. 永真,x*y==ux*uy在计算机里面,保存数字都作为补码 保存,无论有符号无符号,==只是从位级层面比较,不涉及解释方式♦️13.永真,首先这个比较是在位级运算层面的比较。补码和无符号加法有相同的位级行为,也就是从位级层面来看,它们是完全相同的。 ♦️14.永真,这也是位级层面的比较。既然已知x+y == uy+ux,不妨把整个等式统一成补码的角度来看。即x*~y + y*x == -x;然后~y=-y-1,这样等式就成立了。 举个例子 y=5, 假设w=4,即位长为4位,则y的二进制补码表示为0101; -y=-5,其补码表示为1011; -y-1,其补码表示为1010; ~y 是按位取反运算 表示为 1010; 可以发现~y=-y-1
编辑于 2025-11-07 14:33:52 回复(1)