| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 355 人关注过本帖
标题:练习题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
快速回复:练习题4
数据加载中...
 
   



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

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