练习题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 编辑 ]