[英]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.