好好弄清楚是否设置了无符号短路中的位。所以如果x中的位i置位则返回1,否则返回0。另外我要记住,这些位从右边开始编号为0:如b15b14b13 ... b3b2b1b0。好吧,我试过这样,但我认为它不起作用......任何帮助都会赞赏。
short is_set(unsigned short x, int bit) {
return (x >> bit) & 1;
}
答案 0 :(得分:1)
short is_set(unsigned short x, int bit) {
return ((1 << bit) & x);
}
瓦尔特
答案 1 :(得分:0)
你的解决方案似乎是正确的,但要回答为什么它不起作用你应该发布失败的案例。
然后尝试这种方式,并分享您的观察结果:
short is_set(unsigned short x, int bit) {
return (!!((1u << bit) & x));
}
答案 2 :(得分:0)
根据@Eric和@MadHatter的建议创建测试用例:
void Test(short x, int i, int expect) {
printf("Expect %d, is_set(%#x,%d) --> ", expect, x,i);
fflush(stdout); // Flush output as is_set() may fail.
int result = is_set(x,i);
printf(" %d, %s\n", result, expect == result ? "Success" : "Fail");
}
void Tests(void) {
Test(0x0000, 0, 0);
Test(0x0001, 0, 1);
Test(0x1234, 2, 1);
Test(0x1234, 3, 0);
// etc.
}
Expect 0, is_set(0,0) --> 0, Success
Expect 1, is_set(0x1,0) --> 1, Success
Expect 1, is_set(0x1234,2) --> 1, Success
Expect 0, is_set(0x1234,3) --> 0, Success
该功能正确执行“如果x中的位i置位则返回1,否则返回0”。
轻微:将代码命名与要求匹配。
// Return 1 iff bit i in x is set, 0 otherwise
// v
short is_set(unsigned short x, int i) {
次要:返回值为1和0.除非另有说明,否则这应该意味着int
。
int is_set(unsigned short x, int i) {