我在按位操作方面遇到麻烦。
待办事项:x的最高有效半字节的十六进制值等于y(假设0 <= y <= 15)
限制:不得使用相等(==)或不等(!=)测试,相对比较运算符,除法,模数和乘法,条件。
问题:我需要创建我的函数,以便当msb = y时它返回1并且如果它不是真的0.但是,即使我用0xff运行它,我仍然保持为零。如果有人能指出我正确的方向,这将是伟大的。谢谢。
int sig_nib(int x, int y){
int shifright = x >> 27;
int result = shifright & y;
return (result ^ y);
}
答案 0 :(得分:2)
愚蠢的限制。谁破坏了你的编译器?
这样的事情应该这样做:
bool sig_nib(int x, int y)
{
const int top4 = (x >> 28) & 0xf;
return !(top4 ^ y);
}
它使用布尔反转(!
)来重新解释bitwise-xor的整数结果。