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);
}
</