练习题4
写二个函数:1、获取一个int的某个二进制位(bit),给定int,索引,返回对应索引的值(0或1)。
例:
printf("%d\n", get(0x80000000, 31));
输出: 1
printf("%d\n", get(0x00008000), 15);
输出:1
2、把一个int的某个二进制位(bit)设置为(0或1),给定int指针,索引,值(0或1)。
例:
int int_val = 0x80000000;
set(&int_val, 31, 0);
printf("#x\n", int_val);
输出:
0
int int_val = 0x0;
set(&int_val, 31, 1);
printf("%#x\n", int_val);
输出:
0x80000000
从练习5开始就由voidx出题啦,大家要干爸的哦。。。
参考答案:
程序代码:#include <stdio.h>
int get(int val, int offset) {
return ((unsigned)(val & (1 << offset))) >> offset;
}
void set(int * val, int offset, int bit) {
bit ? (*val |= 1 << offset) : (*val &= ~(1 << offset));
}
int main(void) {
printf("%d\n", get(0x80000000, 31));
printf("%d\n", get(0x00008000, 15));
int int_val = 0x80000000;
set(&int_val, 31, 0);
printf("%#x\n", int_val);
int_val = 0x0;
set(&int_val, 31, 1);
printf("%#x\n", int_val);
return 0;
}
/* Output:
1
1
0
0x80000000
Process returned 0 (0x0) execution time : 0.156 s
Press any key to continue.
*/[ 本帖最后由 lz1091914999 于 2011-6-26 10:31 编辑 ]









