簡體   English   中英

c 中的 printf 波浪號運算符

[英]printf tilde operator in c

我知道~運算符不是,所以它反轉二進制數中的位

unsigned int a = ~0, b = ~7;
printf("%d\n",a);
printf("%d\n",b);
printf("%u\n",a);
printf("%u\n",b);

我猜 0 將是 1 和 7 (0111) 將是 8 (1000) 但 output 是

-1
-8
4294967295
4294967288

~0 和 ~7 是如何變成 -1 和 -8 的? 還有為什么 %u 打印那么長的數字?

~運算符只是將數字中的所有位反轉。

在大多數現代編譯器中, int的大小為 32 位,而有符號int使用2 的補碼表示。 這意味着,除其他外,高位是為符號保留的,如果該位為 1,則該數字為負數。

07int字面量。 假設上述情況,我們得到以下結果:

  • 0是位00000000000000000000000000000000b
    = 0當解釋為有signed intunsigned int

  • ~0是位11111111111111111111111111111111b
    = -1當解釋為有signed int
    = 4294967285當解釋為unsigned int

  • 7是位00000000000000000000000000000111b
    = 7當解釋為有signed intunsigned int

  • ~7是位11111111111111111111111111111000b
    = -8當解釋為有signed int
    = 4294967288當解釋為unsigned int

在您的printf()語句中, %d將其輸入解釋為有signed int ,而%u將其解釋為unsigned int 這就是為什么你看到你得到的結果。

~運算符反轉 integer 操作數的所有位。 因此,例如int是 32 位,1 是十六進制的 0x00000001,它的補碼是 0xFFFFFFFE。 當解釋為無符號時,即 4 294 967 294,而作為帶符號的二進制補碼,則為 -2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM