這是代碼
#include <stdio.h>
#include <stdlib.h>
struct marks
{
int p:3;
int c:3;
int m:2;
};
void main()
{
system("clear");
struct marks s={2,-6,5};
printf("%d %d %d",s.p,s.c,s.m);
return 0;
}
尤其是variable : number;,s{values};以及它們之間的關系。我是C新手,所以請放輕松。
這是代碼的輸出。

uj5u.com熱心網友回復:
在結構定義中,該行int p:3;定義p為具有 3 位的位欄位。此外,由于左側 ( int) 的型別是有符號的,這意味著p將是一個有符號位欄位。所以它可以保存從-4到3的值。它可能在你的計算機上使用二進制補碼,所以位和值之間的對應關系是:
| p的位 | 價值 |
|---|---|
| 100 | -4 |
| 101 | -3 |
| 110 | -2 |
| 111 | -1 |
| 000 | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
該行struct marks s={2,-6,5};基本上等同于以下代碼(盡管有時編譯器發出的警告/錯誤有所不同):
struct marks s;
s.p = 2;
s.c = -6;
s.m = 5;
由于c并且m沒有足夠的位來保存此處分配給它們的值,因此您的實作必須在將值存盤到這些變數中之前對其進行修改。通常這是通過截斷高位來完成的。因此,當我們將 -6(二進制的 11111010)塞入 3 位欄位時,它變為 2(010),而當我們將其塞入 2 位欄位時,5(00000101)變為 1(01)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416415.html
標籤:
