我不是很確定, 也懶得去查, 我猜一下好了:第一個強制型別轉換是是由 signed 8 bit 轉為 signed 32 bit, 第一個 bit 的第一個 bit 是 1, 表示它原本是負值. 它是執行 signed extension, 於是轉成 32 bit 就變成也是負值了.第二個先執行一個 0xff &, 一個 16 進位的常數被當成 unsigned, 於是 ( data & 0xff) 被當成 unsigned char, 於是前面是填 0 進去.當然, 這還有很多細節要討論: 如 ( (signed & unsigned) 和 (unsigned & signed) 是不是一樣? 為什麼它一定要變成 unsigned? 這就有頼對於 C 和對 Compiler 較熟的人來回答了期待你的標準答案!!
張貼留言
1 則留言:
我不是很確定, 也懶得去查, 我猜一下好了:
第一個強制型別轉換是是由 signed 8 bit 轉為 signed 32 bit, 第一個 bit 的第一個 bit 是 1, 表示它原本是負值. 它是執行 signed extension, 於是轉成 32 bit 就變成也是負值了.
第二個先執行一個 0xff &, 一個 16 進位的常數被當成 unsigned, 於是 ( data & 0xff) 被當成 unsigned char, 於是前面是填 0 進去.
當然, 這還有很多細節要討論: 如 ( (signed & unsigned) 和 (unsigned & signed) 是不是一樣? 為什麼它一定要變成 unsigned? 這就有頼對於 C 和對 Compiler 較熟的人來回答了
期待你的標準答案!!
張貼留言