标题:练习题4
取消只看楼主
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
结帖率:94.64%
已结贴  问题点数:100 回复次数:1 
练习题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 编辑 ]
搜索更多相关主题的帖子: 参考答案 练习题 
2011-06-26 00:01
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
回复 3楼 lccwyj
你似乎没有用位运算??

My life is brilliant
2011-06-26 10:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-343998-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.962120 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved