CMU CSAPP datalab

这篇博客详细介绍了CMU CSAPP数据实验室的若干练习,涉及位操作技巧,如XOR的性质、取反、位移等。还探讨了浮点数乘以2的操作,包括不同指数情况的处理。内容涵盖位运算、逻辑非、数值范围判断和浮点数转换等主题。
摘要由CSDN通过智能技术生成

CMU CSAPP datalab 2020/8/3

  1. 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));
}
  1. 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. 所有奇数位
    因为没法直接对很大的数操作,所以用范围内的数位运算得到所有奇数位为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码
这个我写的主要是为了方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值