x, y为int整型,ux,uy为无符号整型。x,y的值可能是,int类型取值范围内的任何一个数。
请问下列问题是否对所有符号要求的 x,y 都成立
-
已知
x < 0
,可以得到(x * 2) < 0
-
所有 ux 满足
ux >= 0
-
已知 `x & 7 == 7
,可以得到
(x << 30) < 0`` -
所有 ux 满足
ux >= -1
-
已知
x > y
,可以得到-x < -y
-
所有 x 满足
x * x >= 0
-
已知
x > 0 && y > 0
,可以得到x + y > 0
-
已知
x >= 0
,可以得到-x <= 0
-
已知
x <= 0
,可以得到-x >= 0
-
所有x 满足
(x | -x) >> 31 == -1
整型 灵魂拷问答案
- False, 反例:Tmin,也就是INT_MIN
- True, 无符号数一定大于0
- True, 向左偏移后,符号位为1,所以一定小于0
- False,有符号和无符号数在运算得时候,会自动讲有符号转换成无符号数。-1是最大的无符号数
- False, 反例:假设
x == 0, y == Tmin
,x,y的相反数是x,y本身,所以后者不成立 - False
- False,
Tmax + 1 == Tmin
- True
- False, 只有一个反例,那就是
x == Tmin
- False, 唯一反例,
x == 0
int、float、double间的强制类型转换
在没有了解编码方面的细节前,我们对这个问题只能说知其然而不知其所以然。
int转换成float,数字不会溢出,但是可能被舍入。
int或float转换成double,因为double有比这两者都来得更大的范围,和更高的精度,所以能够保留精确的数值。
double转成float,范围会变小,有可能得到值正负无穷。由于精度也变小了,所以可能被舍入。
float或double转成int,值将会像零舍入。例如:1.999会变成1,-1.999会变成-1。值有可能溢出