C程序设计语言(第2版·新版)- 练习2-6
2014-02-12 19:21
204 查看
C程序设计语言(第2版·新版)
练习2-6:编写一个函数setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。这道题想了好久,我的做法是
((y<<(p+1-n)) | (~0<<(p+1)) | (~(~0<<(p+1-n)))) & x;
尝试了一个例子setbits(0x9a, 4, 3, 0x35),实验测试结果是146,而正确结果应该是150,出错点应该是~0左移出现的左侧众多1导致的,具体怎么算出这个146的不想去深究了。
正确解答为
(x & ~(~(~0 << n) << (p+1-n))) | (y & ~(~0 << n) << (p+1-n));
这里采取的思路是先置x的那n位为0,然后将y的右n位移动到合适位置再和前面的结果相或
可以看到,如果把~(~0 << n) << (p+1-n)看成一个整体z的话,其实就是(x&~z)|(y&z)
相关文章推荐
- C程序设计语言(第2版·新版)- 练习2-7
- 个人学习C程序设计语言(第2版·新版)笔记
- 【打基础】高级语言程序设计·厦大出版社 课后习题个人记录2
- 练习1-16:修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本(C程序设计语言 第2版)
- 【打基础】高级语言程序设计·厦大出版社 课后习题个人记录3
- 练习1-23:删去C语言程序中所有的注释语句(C程序设计语言 第2版)
- 练习1-12:编写一个程序,以每行一个单词的形式打印其输入(C程序设计语言 第2版)
- 练习1-21:编写程序entab,将空格串替换为最少数量的制表符和空格。。。(C程序设计语言 第2版)
- 【打基础】高级语言程序设计·厦大出版社 课后习题个人记录1
- 【打基础】高级语言程序设计·厦大出版社 课后习题个人记录4
- C程序设计语言(第二版.新版)练习1-10
- 练习2-3:十六进制数字字符串转换为等价整型值,字符串允许包含的数字包括:0~9、a~f、A~F、x、X(C程序设计语言 第2版)
- 练习1-13:编写一个程序,打印输入中单词长度的直方图(水平)(C程序设计语言 第2版)
- NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(约翰·亨利-dp)
- 【Java语言程序设计】第一章编程练习
- C++程序设计语言练习4.3
- 黑马程序员-----------C语言基础-----------结构体·枚举
- C++程序设计语言练习4.6 局部名字和外部名字的长度限制
- 【OC语言】第六篇·内存管理
- C程序设计语言练习3-2