簡體   English   中英

結構 - 解釋輸出:

[英]Struct - Explain the output:

我有以下C代碼。

struct values{
  int a:3;
  int b:3;
  int c:2;
};

void main(){
  struct values v={2,-6,5};
  printf("%d %d %d",v.a,v.b,v.c); 
}

當我執行代碼時,我得到以下輸出:

2 2 1.

但輸出應該是2 -6 5 ,對嗎?

如果我錯了請解釋。

-6超出了3位signed int的范圍。 因此,您正在觀察未定義的實現定義行為的工件(實際上,您的值的最重要部分將被丟棄)。

{2,             |  -6,             |        5        }
010 last 3 bits |  010 last 3 bits |  01 last 2 bits
2                  2                        1    

不。輸出是2 2 1

C編譯器將值轉換為Binary,並存儲在內存中。

二進制值2: 00000010

二進制值-6: 11111010 (11111001 + 1)

二進制值為5: 00000101

存儲在內存中:

對於2,將存儲010。

對於-6,將存儲010。

對於5,將存儲01。

當您從main方法訪問這些變量時,對於va將返回“010”,此處最左側的位用於符號。

所以va是2.類似地,vb是2,vc是1。

希望能幫助到你。

暫無
暫無

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

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