【程序员面试宝典】强制类型转换之面试例题2
来源:互联网 发布:java完全自学txt下载 编辑:程序博客网 时间:2024/06/06 02:02
题目:
void main() { unsigned int a = 0xFFFFFFF7; unsigned char i = (unsigned char)a; char* b = (char*)&a; printf("%08x, %08x\n", i, *b); }
输出:
000000f7, fffffff7
(1)i的输出的解释:
unsigned char仅占一个字节,对int型的a进行截断。
字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。
小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;
大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。
基于X86平台的PC机是小端字节序的
基于以上理论可知,截断时,i会获得低字节数据F7。由于是无符号的,要求输出8位,则填充为000000F7才输出。
(2)*b的解释:
指针类型的转换,而非char类型的转换。
先看下面一个例子:
unsigned int a = 0XAAAAAAA7;unsigned char i = (unsigned char)a;char * b = (char*)&a;unsigned char* c = (unsigned char*)&a;printf("%08x, %08x, %08x, %08x\n", a, i, *b, *c);printf("%x, %x, %x, %x\n", a, i, *b, *c);
输出:
可见,输出与前六位无关,说明发生了截断。
具体解释如下:
(char*)&a 将a的地址转换成一个char型指针,和(int*)&a 转换成一个int是不同的,它只会指向&a的低8位内存,其余的发生了截断。
所以 现在b指向的是0xf7, 这是一个负数,使用%08x 输出 就是ffffffff7.
参考:
http://blog.csdn.net/zhanghenglei/article/details/7330365
http://www.cppblog.com/aaxron/archive/2011/02/28/140786.aspx
- 【程序员面试宝典】强制类型转换之面试例题2
- 类型转换 程序员面试宝典(3)
- 程序员面试宝典_7.2 _面试例题9
- 程序员面试宝典-第九章-面试例题2-深浅复制
- 程序员面试宝典(第四版) —— 类型转换
- 29.c/c++程序员面试宝典-类型转换构造函数
- 【程序员面试宝典】第7章,面试例题6
- 程序员面试宝典-第九章-9.1-面试例题3
- 程序员面试宝典-第12章-面试例题
- 程序员面试宝典_8.2_典型递归问题_面试例题1
- 程序员面试宝典-第九章-9.3-面试例题2(有错)
- 程序员面试宝典(第三版)P70例题7勘误
- <<程序员面试宝典>>读书笔记 2
- java程序员面试宝典2
- 整形、字符串相互转换---程序员面试宝典
- 《面试宝典》例题之模拟火车站售票程序
- 程序员面试宝典---3.3 面试
- 程序员面试宝典之实现strcpy函数
- 游戏动画技术的发展
- ubuntu在系统启动logo过后无法进入桌面的处理方法
- 动态规划算法
- 编程之美 2.4
- 提高抗压能力
- 【程序员面试宝典】强制类型转换之面试例题2
- java中的回调
- ssh
- Hibernate的list:多对多
- Android在多个Activity之间共享一个View
- WIN8开发
- Java观察者模式 java.util.Observable 与 java.util.Observer 的理解
- 希腊字符及读法
- 监听器模式(观察者模式)