对给定值进行操作
来源:互联网 发布:网络黄金王晨芳照片 编辑:程序博客网 时间:2024/06/02 17:40
题目:
Write a C expression that will yield a word consisting of the least significant
byte of x, and the remaining bytes of y. For operands x = 0x89ABCDEF and y =
0x76543210, this would give 0x765432EF.
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef unsigned char *byte_pointer;void show_x_y() { int x = 0x89ABCDEF; int y = 0x76543210; byte_pointer start; for (int i = sizeof(int)-1; i > 0; i--) { start = (byte_pointer)&y; printf("%x", start[i]); } start = (byte_pointer)&x; printf("%x ",start[0]); printf(" x=%x,y=%x", x, y);}int main(){ show_x_y(); return 0;}
结果:
分析:
题目要求显示 x 的最后两位和 y 的前6位。
x=0x89abcdef,定义时就指明了十六进制,因此在内存中存储时,直接是每一位对应四位二进制,即 x=1000 1001 1010 1011 1100 1101 1110 1111(地址由低到高)。同理 y=0x76543210,在内存中存储为 y=0111 0110 0101 0100 0011 0010 0001 0000(地址由高到低)。因此在用指针从内存中读取数值时,每移动一次指针,实际上跨越了二进制的八位,也就是十六进制的两位,所以,用start[0]读取 x 时,结果为 ef,而不是 f 。同理,读取 y 时,因为题目要求不读最后两位,所以,指针应该从 start[1] 开始,又由于题目要求显示格式为从左到右从高位到低位,因此我们应该倒着读取,即从 start[sizeof(int)-1] 读到 start[1] 。
0 0
- 对给定值进行操作
- C#,递归对给定目录进行操作
- 对给定数组进行排序
- 给定一个源串和目标串,能够对源串进行如下操作:
- 据给定的日历字段和对应的时间,来对当前的日历进行操作。
- 对给定的一句话进行依存分析
- 对给定链表进行插入排序。
- 对cooike进行操作
- 对cooike进行操作
- 对IIS进行操作
- 对文件进行操作
- 对Oracle进行操作
- 对文件进行操作
- 对tableview进行操作
- 对文件进行操作
- 给定一个数组,对该数组进行全排列
- 对给定的分数进行排序输出排名序列
- (基础九)对给定的数组进行反转
- Binder源码解析(从客户端到服务端代码流程)
- Notepad++ 快捷键列表及自定义快捷键
- 数据操作语句-1
- 15题 flag的应用
- "数据结构动画演示"文件分享
- 对给定值进行操作
- vitamio5.x的简单使用
- 求助
- 2015上海邀请赛
- [leetcode]: 448. Find All Numbers Disappeared in an Array
- sass简单入门学习
- JavaMail发送邮件
- CodeForces 732 C.Sanatorium(水~)
- 计算机操作系统(第四版)第二章 进程管理 试题