日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【程序员面试宝典】强制类型转换之面试例题2

發布時間:2025/3/19 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【程序员面试宝典】强制类型转换之面试例题2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

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

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

轉載于:https://www.cnblogs.com/wangicter/archive/2012/08/26/4767315.html

總結

以上是生活随笔為你收集整理的【程序员面试宝典】强制类型转换之面试例题2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。