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