2021-2-3 csapp:datalab

int类型规则:
    1. 只允许使用0-0xff的整数
    2. 只允许存在函数参数和局部变量(无全局变量)
    3.可使用的一元运算符! ~
    4.可使用的二元运算符& ^ | << >>
    5.只允许使用整数, 不可以使用联合体数组等
    6.不允许使用任何控制结构
    7.不允许使用任何宏或者定义宏
    8.不允许定义任何/调用函数
    
您可以假设您的机器:
    1.使用2s补码(32位整数表示)。
    2.算术执行右移。
    3.如果移位量小于0或大于31,则在移位时具有不可预测的行为。
 

Rate1:

一、bitXor(只允许使用~和|)
int bitXor(int x, int y) {
   
    return (~(x&y))&(~(~x&~y));    
}

思路:
(君离散数学本当上手)

二、timin(返回最小值)
int tmin(void) {
   
  return (1<<31);
}

思路: 一开始看到没有参数懵逼的说, 然后看了下攻略发现直接返回一个数就行了, 那么可以考虑直接位移就行了,0xff<<24什么的也是可以哒!

三、isTmax(是否为最大补码)

这题不会看, 所以知乎大佬的:

int isTmax(int x) {
   
  int i = x+1;
  x=x+i;
  x=~x;
  i=!i;
  x=x+i;
  return !x;
}

(照搬知乎李明岳大佬)

 

Rate2:

四:allOddBits(判断参数x是否奇数位全为1)
int allOddBits(int x){
   
    int mask=(0xAA)+(0xAA)<<8;
    mask=mask+(mask<<16);
    return !((~x&mask)^mask);
} 
</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值