[英]Explain the behaviour of 1-bit bit-fields
#include<stdio.h>
int main()
{
struct value{
int bit1 : 1;
int bit3 : 4;
int bit4 : 4;
}bit={1,2,2};
printf("%d %d %d\n",bit.bit1,bit.bit3,bit.bit4);
return 0;
}
Output:
-1 2 2
請解釋程序的輸出?
bit1
是一個帶符號的 1 位 integer,它只能保存值-1
和0
。
想必唯一好奇的 output 是第一個吧。
那么,請考慮 1 位二進制補碼integer 可以表示的值的范圍。
請注意結構中的以下語句:
int 位 1:1; --> 'int' 表示它是一個帶符號的 integer。對於帶符號的整數,最左邊的位將用作 +/- 符號。 如果在 1 位字段中存儲 1: 最左邊的位為 1,因此系統會將其值視為負數。
系統使用2的補碼方法來處理負值。
因此,存儲的數據為1。1的2的補碼也為1(負數)。
因此打印 -1。
如果在 4 位字段中存儲 2: 二進制 2:0010(最左邊的位為 0,因此系統會將其視為正值) 0010 為 2 因此打印 2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.