Tho*_*fur -1 c bit-manipulation bitwise-operators twos-complement
对于此问题,如果参数大于 7,则要求返回 1,否则返回 0。
例如,如果 x 为 8,则该函数将返回 1。如果 x 为 7,则该函数将返回 0。
唯一允许的合法运算符是 (! ~ & ^ | + << >>),它禁止使用其他任何运算符,例如 -、for 循环、while 循环、if 语句等。
我们可以假设系统使用 2 的补码和整数的 32 位表示,以算术方式执行右移,并且在将整数移位超过字大小时会出现不可预测的行为。
我知道不使用 - 操作的减法可以用 ~ 来完成,但说实话,我不知道如何从逻辑上思考这个问题。
在二进制中,十进制数7是111。因此,大于 7 的数字将始终具有比 7 的二进制表示中的最高有效位(即从 0 编号时的位 3)组更高的有效位组。因此,如果您只处理无符号数字,那么这个测试就足够了:
int bitwise_is_n_gt_7 (unsigned int value)
{
return value & 0xFFFFFFF8; // assuming size 32-bits adjust as necessary
}
Run Code Online (Sandbox Code Playgroud)
如果您正在处理带符号的数字,您还必须处理数字为负数的可能性,因此您需要测试:
int bitwise_is_n_gt_7 (int value)
{
return (!!(value & 0x7FFFFFF8) & !(value & 0x80000000));
}
Run Code Online (Sandbox Code Playgroud)