回覆列表
  • 1 # 使用者6452815394106

    題目更新。因為:函式呼叫時,引數以字長(32位機器上就是四個位元組)為大小進行壓棧,不足四位元組的整數會先轉化成四位元組整數int。由於char是有符號數,所以在轉換為int時需要按符號位擴充,這樣才能保證負數能正確表示。因此0x88(這是-128 + 8 = -120)會變成0xffffffff88,而0x78(這是+126)會變成0x00000078。在printf內部,它會按照你給它的格式控制符"%08x"來解釋你的引數(因為printf是一個變長引數引數,它的宣告為printf(const char* format, ...),沒有辦法得到...中引數的具體型別,只能由格式控制符指定),這樣它就被當作了一個十六進位制無符號四位元組整數來轉化為字串輸出了。下面是原答案===============在x86/x64體系中,數字是按little-endian順序儲存的,所以0xf0000078的儲存格式為0x78, 0x00, 0x00, 0xf0。*b讀出來的就是第一個字元0x88。*b1讀出來的就是0x78。

  • 2 # 滴逃逃

    0xfe 存放在一個位元組記憶體中時, 二進位制形式為 1111 1110

    而變數a也是一個位元組, a=0xfe意味著1111 1110這八個位元原樣copy到a所在位置.

    但是, a是有符號的, 計算機會將a中這八個位元解釋為有符號數. 這個有符號數顯然是負數, 因為最高位是1. 那到底是負的多少呢? 我們將八個位元取反加1看看

    1) 取反, 得到 0000 0001

    2) 再加1, 得到 0000 0010

    所以, 結論是, 負2

  • 中秋節和大豐收的關聯?
  • 起名字陳在前沈在後?