每一个function的格式应该符合此图,同时在使用int类型编码时只能使用特定的八个运算符与int类型,并且禁止使用高级的结构,调用其他函数。在使用float类型时规则有限度的放宽了。
1.1:用与非实现异或;
德摩根化简用与非实现异或。
1.2:输出32位二进制最小数的补码;
最小数为-2的32次方,即0x80000000;补码即取反后加一为0x80000000,为0x00000001左移31位。
2:判断x是否等于32位二进制最大数的补码;
最大数的补码为0x80000000-1,即0x7ffffffff。对每一位进行与或,即得到答案。
3:判断是否所有奇数位都是1;
将偶数位全是1,奇数位全是0的数与x按位或,如果得到的数是全1的那么即说明x奇数位全是1,可返回1。
4:求复数,取反+1,白给的。
5:判断输入的数字是否处于0x30~0x39之间,那么我们判断两端,如果既能大于a又能小于b,那么就返回1。
6:要求实现x?y:z,即为x=1时输出y,其他情况输出z,先将bool(x),让x在全0的情况下等于0x11111111,其他情况为0x00000000。然后直接按位return y或 z。
7:要求判断xy的大小,由于int是有符号整形,所以首先判断xy的符号,如果符号不同直接输出结果。只有在同号的情况下才会做减法然后判断大小。
8:不利用!的情况下实现!的功能,那么我们先取输入的相反数,然后再取或,那么除了0以外的所有数最高位都会是1,只有0是0,再移位之后与0x00000001异或即可。
9:上难度,要求返回输入数的最小字节数。那么我们先将负数转化成正数,然后再求正数最小位数加1。求正数的最小位数利用了二分查找的思想,这里是从网上抄的但感觉没什么毛病。