回覆列表
-
1 # 使用者6452815394106
-
2 # 滴逃逃
0xfe 存放在一個位元組記憶體中時, 二進位制形式為 1111 1110
而變數a也是一個位元組, a=0xfe意味著1111 1110這八個位元原樣copy到a所在位置.
但是, a是有符號的, 計算機會將a中這八個位元解釋為有符號數. 這個有符號數顯然是負數, 因為最高位是1. 那到底是負的多少呢? 我們將八個位元取反加1看看
1) 取反, 得到 0000 0001
2) 再加1, 得到 0000 0010
所以, 結論是, 負2
相關內容
- int運算規則?
- 用char輸入一串數字,然後轉化成int型,怎麼弄?
- C語言:設有說明語句:char a='\72';則變數a()?
- 請問c語言中,int型別變數所佔位元組數是?
- 判斷字串s是否迴文的函式原型宣告int palindrome(char *s);當字串s是迴文時函?
- 如何理解char型指標與int型指標的不同表現?
- C語言問題變數說明意義?
- int k=0; char c='A'; do { switch(c++) { case 'A':k++;break; case 'B':k--; case 'C':k+=2;break; case?
- int型變數是指什麼?
- 為什麼Python不需要定義int double char等型別且可以直接高精度演算法,而C++需要?
題目更新。因為:函式呼叫時,引數以字長(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。