CMU CSAPP datalab 2020/8/3
- bit Xor
a Xor b = (~a)*b + (~b)*a
aa + bb = ~((~a)&(~b))
简单的布尔逻辑
int bitXor(int x, int y) {
int a = (~x) & y;
int b = (~y) & x;
return ~((~a) & (~b));
}
- tmin
注意到最小的整数特征是最高位为1其余为0
int tmin(void) {
return 1 << 31;
}
3.tmax
因为没有办法用位运算,所以想到往tmin的特殊性上靠
tmin 和 0 是仅有的取反运算之后还是本身的值
首先判断不是-1,然后判断是否满足上述性质
int isTmax(int x) {
int eqz = !!(x + 1);
return eqz & !((~(x + 1) + 1)^(x + 1));
}
- 所有奇数位
因为没法直接对很大的数操作,所以用范围内的数位运算得到所有奇数位为1的数
int allOddBits(int x) {
int a = (170 << 8) + 170;
int b = (a << 16) + a;
return !((b & x) ^ b);
}
5.取反 送分
int negate(int x) {
return ~x+1;
}
6.是asciin码
这个我写的主要是为了方便