《C和指针》章节后编程练习解答参考——第5章
2015-11-27 14:25
323 查看
5.1
题目:
略
解答代码:
5.2
题目:
略
解答代码:
5.3
题目:
编写函数,函数返回值把参数的二进制位模式从左到右变换一下后的值。
函数原型:
unsigned int reverse_bits(unsigned int value);
解答代码:
5.4
5.5
题目:
编写函数,把一个给定的值存储到一个整数中指定的几个位。假定整数中的位是从右向左进行编号,起始位的位置不会小于结束位的位置。
函数原型:
int store_bit_field(int original_value, int value_to_store, unsigned starting_bit, unsigned ending_bit);
提示:
创建一个掩码
用掩码的反码对原值AND操作
将新值左移,使与待存储值对齐
把移位后的值与掩码进行AND操作
把结果值与原值进行位OR操作
解答代码:
题目:
略
解答代码:
#include <stdio.h> int main(void) { char ch; while (((ch = getchar()) != EOF) && (ch != 'z')) { if (ch >= 'A' && ch <= 'Z') { ch += 'a' - 'A'; } putchar(ch); } getchar(); return 0; }
5.2
题目:
略
解答代码:
#include <stdio.h> int main(void) { char ch; while (((ch = getchar()) != EOF) && (ch != 'z')) //输入z时退出 { if (((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z'))) //加密 { if ((ch <= 'M') || (ch <= 'm')) { ch += 'n' - 'a'; } else if ((ch >= 'N') || (ch >= 'n')) { ch -= 'n' - 'a'; } } putchar(ch); } getchar(); return 0; }
5.3
题目:
编写函数,函数返回值把参数的二进制位模式从左到右变换一下后的值。
函数原型:
unsigned int reverse_bits(unsigned int value);
解答代码:
#include <stdio.h> #define NUM 0xA5 unsigned int reverse_bits(unsigned int value) { unsigned int i; unsigned int valuebak = 0; char list[100] = { 0 }; for (i=1; i!=0; i<<=1) { valuebak <<= 1; valuebak |= (value & 0x01); value >>= 1; } return valuebak; } int main(void) { unsigned int rev; rev = reverse_bits(NUM); printf("0x%X\n", NUM); printf("0x%X\t\t%d\n", rev, rev); getchar(); return 0; }
5.4
5.5
题目:
编写函数,把一个给定的值存储到一个整数中指定的几个位。假定整数中的位是从右向左进行编号,起始位的位置不会小于结束位的位置。
函数原型:
int store_bit_field(int original_value, int value_to_store, unsigned starting_bit, unsigned ending_bit);
提示:
创建一个掩码
用掩码的反码对原值AND操作
将新值左移,使与待存储值对齐
把移位后的值与掩码进行AND操作
把结果值与原值进行位OR操作
解答代码:
#include <stdio.h> #define ORI_VALUE 0xFFFF #define VALUE_STORE 0x123 #define START_BIT 13 #define END_BIT 9 int store_bit_field(int original_value, int value_to_store, unsigned starting_bit, unsigned ending_bit) { unsigned int int_bit = sizeof(unsigned) * 8; if ((starting_bit <= int_bit) && (ending_bit <= int_bit) && (ending_bit < starting_bit)) { unsigned int maskt = ~0; unsigned int mask = 0; unsigned int i; for (i=starting_bit; i>=ending_bit; i--) //生成掩码 { mask |= (1<<i); } original_value &= ~mask; value_to_store <<= ending_bit; value_to_store &= mask; //待存储数据与掩码匹配 original_value |= value_to_store; } else printf("Data format error!\n"); return original_value; } int main (void) { int value; value = store_bit_field(ORI_VALUE, VALUE_STORE, START_BIT, END_BIT); printf("0x%X\n", value); getchar(); return 0; }
相关文章推荐
- [PHP] PHP初学者想了解"伪静态",必须看这个贴 [复制链接] [推荐]
- 一些有趣的python开源项目
- 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具。解决方法
- 【非原创】PHPMywind调用
- 为什么在Spring的配置里,最好不要配置xsd文件的版本号
- Some Notes of Python Interfaces Pycaffe (Caffe)
- 关于yii2的使用demo
- python 跳板机登录脚本
- php读取目录及子目录下所有文件名
- c#实现c语言memcpy各种类型转换
- php define
- C#调用Mail发送QQ邮件
- 传入一个年份,求该年不是闰年——C语言函数
- Java中用JXL导出Excel代码详解
- 【Struts2】(2)动态调用方法
- callgrind使用说明(一款可以生成c++或c运行堆栈性能的工具)
- Java NIO (十一) Pipe
- 11.27JAVA序列化及克隆技术
- sphinx服务器安装及配置详解 安装PHP sphinx扩展
- 搭建SpringMVC+Mybatis框架并实现数据库的操作