簡體   English   中英

解釋 1 位位域的行為

[英]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,它只能保存值-10

想必唯一好奇的 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.

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