簡體   English   中英

難以理解,未簽名

[英]difficulty understanding signed not

我在理解為什么c在以下程序中等於-61時遇到問題:

   main() {
       unsigned int a = 60;     // 60 = 0011 1100   
       unsigned int b = 13;     // 13 = 0000 1101
       int c = 0;           
       c = ~a;          //-61 = 1100 0011
       printf("Line 4 - Value of c is %d\n", c );
   }

我確實了解NOT運算符如何在0011 1100上工作(解決方案為1100 0011)。 但是我不確定為什么十進制數會增加1。這是從unsigned int(從a)到signed int(從c)的某種類型轉換嗎?

從正數到負數的二進制補碼轉換(標准帶符號格式)構成按位求反,然后加一個。

請注意,為簡單起見,我使用一個帶符號的字節。

So if 60 = 0011 1100
Then c   = 1100 0011 + 1
         = 1100 0100

對於帶符號字節,最高有效位為負,因此

c = -128 + 64 + 4 = -60

您需要加1來考慮以下事實:最高有效位是-128,而最大正數是0111 1111 =127。對於-128,所有負數都有1,需要偏移。

當您將0轉換為-0時,這很容易看到。 反轉00000000,得到11111111,加1則返回00000000。對1到-1執行相同操作,則得到11111111-可能的最大負數。

暫無
暫無

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

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