int a 2 printfu ,a 輸出為 65534 為什麼?麻煩解釋一下!!謝謝

時間 2021-06-25 15:00:10

1樓:風若遠去何人留

出現這種情況, 是用的16位編譯器. int佔2位元組.

賦值int a=-2; 補碼形式儲存, 實際儲存為0xfffe用%u輸出, 會轉為無符號數(unsigned int)也就是輸出0xfffe為原碼的正數值, 即65534

2樓:三笑牌拳頭

printf("%u",a)中u是unsigned int的意思,即無符號數,如果你輸printf("%d",a)就會輸出-2了。

int a = -2在記憶體裡以補碼形式表示就是65534,符號數是一種輸出形式,無符號數是另一種輸出形式。

3樓:滬上新視界眼科

整形2在計算機中16二進位制表示為:0000 0000 0000 0010

所以-2用2的補碼錶示為:1111 1111 1111 1110

(最高位用0表示正數,用1表示負數,-2即為將2的最高位變為1,將剩餘位數取反,結果數加1,具體參看補碼的表示方法)

由於輸出時採用%u限制格式,用無符號表示,而1111 1111 1111 1110即表示65534(=2^16-2)

(1 0000 0000 0000 0000=1111 1111 1111 1110+1+1)

4樓:葉子草

%u為以無符號十進位制輸出。無符號整數能表示的數範圍是0-65535,即對應的二進位制數0-1111111111111111(16個1)。

int a=-2;a為有符號的整型,以1111111111111111(16個1)的二進位制數儲存。(-2二進位制表示為10000000000000010,負數在計算機中用補碼錶示,即1111111111111110)。如果用%d輸出a,則為-2,但是轉換成無符號整數%u輸出,1111111111111110(原來的有符號整數-1)被解釋成1111111111111110(無符號整數65534),輸出結果為65534

5樓:匿名使用者

補碼知道不是什麼東西

c語言中:unsigned int a=-2;printf("%u",a);輸出結果為多少?

6樓:

在16位int平臺下,輸出是65534;在32位int平臺下,輸出是4294967294。以32位int平臺為例,題中的unsigned int a=-2;語句在unsigned的修飾下,賦給變數a的是-2補碼的無符號值,即4294967294。但後面的printf("%u",a);的輸出並不與a是否為有符號數沒有關係,輸出是否為有符號數由"%u"中的控制符%u決定,這裡%u表示將變數a按無符號數輸出,所以輸出是4294967294。

因此,如果將unsigned int a=-2;改為int a=-2;,printf("%u",a);同樣輸出4294967294。即使是unsigned int a=4294967294;這樣定義a,用printf("%d",a);輸出就是-2;因為輸出是由控制符%d決定的。

7樓:頹廢前進

輸出結果為65534或者4294967294

因為在不同位的作業系統下,數值的表示位數是不一樣的。首先我們先明確一點:在計算機中,正數用原碼來計算(正數的原碼、補碼、反碼都是一樣的);負數是用補碼來計算的。

至於原因可以參考一下文章網頁連結就是把減法簡化為加法從而大大簡化計算機電路的過程。

首先在16位系統中,-2的原碼為1000 0000 0000 0010;補碼為:1111 1111 1111 1110;我們使用的unsigned為無符號數,那麼此時計算機會把我們的-2強制轉化為正數進行運算,即用1111 1111 1111 1110表示-2,即為65534.

在32位作業系統中,-2的原碼為:1000 0000 0000 0000 0000 0000 0000 0010;補碼為:1111 1111 1111 1111 1111 1111 1111 1110;同上述,計算機會強制輸出1111 1111 1111 1111 1111 1111 1111 1110所代表的十進位制數,即4294967294。

#include

#include

void main()

輸出結果:

65535   65535

-2   4294967294

8樓:

應該是4294967295-2+1=4294967294

因為unsigned int a=-2;這句會強制把負數,轉換成正數

9樓:匿名使用者

在vc等32位編譯系統上-2的補碼是11111111111111111111111111111110

若解釋為unsigned int則為4294967294

同理unsigned int a=-2;printf("%d",a);雖然定義a是unsigned型別,但printf();函式中解釋為int型別,輸出結果還是-2。記憶體中的2進位制資料不同的解釋方式,有不同的顯示結果。

10樓:

unsigned int 為 0--655351111 1111 1111 1111 為 65535-2用補碼錶示

1000 0000 0000 0010 取反加11111 1111 1111 1110

結果為 65534

11樓:匿名使用者

看你的機器是多少位的,32位的和64位的結果是不同的

main() {int a=2,b=5; printf("a =%%d,b=%%d,a,b); },輸出的結果為什麼a=%d,b=%d呢?我一直搞不懂,謝謝!

12樓:

由於單個的%有別的用處,所以要輸出單個%時必須雙寫成%%,顯然上例中%%d就只輸出%d了;按c/c++「貪心法」%%d被解釋成(%%)d而不會解釋成%(%d)。如果想達到輸出「%d」的效果,得寫成%%%d才可以,這就被解釋成(%%)%d了,最後輸出就是%x形式。如:

#include "stdio.h"

int main(int argv,char *argc)輸出樣例:

13樓:匿名使用者

%符號會將它後面的一個字元轉義,比如%d就代表數字,%s代表字串,而%%就代表%字元

第一個%是轉義符號,第二個%是告訴printf函式要輸出%

2 若有以下說明 int a 121,2,3,4,5,6,7,8 char c a,d,g則數值為4的表示式是 DA a

a.a g c 因為g沒有值,所以計算的時候會按地址的值來計算。錯 b.a 4 表示的是第5個數。為5c.a d c 使用ascii計算 d c 1,即a 1 2 d.a d c 注意c沒有單引號,故a d c a d a 使用ascii計算 d a 3,即a 3 4 故選擇d 希望能幫助你! 變數...

南天pr2開機後station1燈閃爍是什麼問題

米果的媽媽 重新設定一下。獲得印表機配置引數 操作步驟 1.關閉印表機電源。2.按住操作面板上的 station2 鍵,開啟電源,等待印表機復位完成後鬆開按鍵。3.插入一張 a4 紙,這時印表機將自動進紙並列印印表機的配置引數,如果涉及的引數項比較多則一頁有可能打不完,這時需要再放入一張紙到印表機以...

澳洲457簽證拿到2年後肯定可以轉pr麼

還是需要有僱主擔保你的,還有其他要求的 pr不是轉的 是要申請的 符合條件才可以的 temporary residence transition stream,各類申請條件會有大幅降低,如雅思成績 職業評估。直接申請186,走的是direct entry stream,各類條件一個不能少。具體條件可...