Lab Notes¶
1 Data Lab¶
-
isTmax(int x)
,卡在如何区分0x7ff...f (TMax)
和0xff...f (-1)
,方法为!(-1+1)==1
,而!(n+1)==0, n!=-1
。 -
int n; n^n == 0
,因此int a,b; if (a == b)
相当于if !(a ^ b)
-
isAsciiDigit(int x)
,卡在如何判断0<=n<=9
,方法为n-10<0
,-10
为~10+1
,<0
则符号为1
-
-1 = 0xFF...F
,-1
二进制补码为全 1,则-1^n=~n, -1&n=n, -1|n=-1
,~0=-1
-
int isLessOrEqual(int x, int y)
,思路是符号不同正数为大,二是符号相同看差值符号。符号不同时,相减求差值可能溢出,所以直接判断正数为大;符号相同时相减求差值的符号。 -
int howManyBits(int x)
,思路:对于0
,返回1
;对于正数,返回从补码第一个为1
以后的 bits 长度+1
,+1
为正数的符号位0
;对于负数,返回补码第一个为0
以后的 bits 长度+1
,+1
为负数的符号位1