當前位置:首頁 » 編程語言 » c語言位域的取值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言位域的取值

發布時間: 2022-06-28 07:48:10

㈠ 初學者問一個c語言的問題,關於位運算。

把一個位元組分成了三個更小的部分,a一位,b三位,c四位。
pbit->a=0就是把a賦值為0;
pbit->b&=3就是pbit->b=pbit->b&3,3的二進制為011,即保留二進制b的後兩位;
pbit->c|=1同上pbit->c=pbit->c|0001,按位與0001做"或"操作.

㈡ c語言 位域長度

這個主要還是要看編譯器以及程序的運行環境。例如普通32位的環境中,位域可以定義為32bit,超過32bit就會報錯。
我的理解是LZ書上看到的位域不允許跨2位元組是由於運行環境是8bit的。因此在單片機編程中可以定義16bit的ul類型(該單片機的位寬應該是大於等於16bit的)。

我在自己的64位系統上編寫了類似的代碼,把編譯器位寬設置為64位,發現位域就可以達到64bit,超過64bit就會報錯。

㈢ c語言/取值范圍

C語言中int的取值范圍為:-2147483648 ~ 2147483647

解釋如下:
int類型在C語言中佔4個位元組,即32個二進制位。

當表示正數時,最高位為符號位(符號位為0),最大的正數是 0111 1111 1111 1111 1111 1111 1111 1111 即2^31 -1 = 2147483647
當表示負數時,最高位為符號位(符號位為1),最小的負數是 1000 0000 0000 0000 0000 0000 0000 0000 而在計算機中是以補碼的形式存儲的,C語言規定 1000 0000 0000 0000 0000 0000 0000 0000 的補碼為-2147483648
所以C語言中int的取值范圍為:-2147483648 ~ 2147483647

㈣ c語言 結構體位域問題

c存在第三個位元組

sizeof結構體,這個要看結構體內變數是如何定義的,結構體存放數據有個對齊原則,找到佔用最大位元組的變數,然後都向它對齊,比如bool和char類型佔用一個位元組,short占兩個位元組,int,float為4個位元組,double為八個位元組。

定義的順序不同,sizeof的結果不同。我給你舉個例子。

structA{
inta;
charb;
charc;
};


sizeof(A)應該為4+1+1,但是需要對齊,所以這個值就是8

圖2

這個是struct B的變數存儲

㈤ 關於C語言里的位域賦值問題

c在結構提中定義位,是無符號整型,unsigned int。你定義成int那麼默認為有符號整型了。
雖然可以定義成int類型,但是一般沒人這樣去做。因為有更好的方法去這樣做。
你的應該改成

typedef struct _ss_
{
unsigned int a:2;
unsigned int b:2;
unsigned int c:2;
unsigned int d:1;
}ss;

ss ff;
int uu

ff.a=1;
ff.b=2;
ff.c=3;
ff.d=4;

uu = ff.a;
uu = ff.b;
uu = ff.c;
uu = ff.d;

㈥ c語言位域問題


unsigned int a2 : 1;

你只有一位,bit 1 是符號位。
int a2 : 1; 是有符號數,解釋為補碼,成了 -1.

int a2 : 2; // 如果用2位,1 就是 +1 了。用2位,則 1位符號位(解釋為補碼),另一位數字位。

㈦ 關於c語言的「位域」。

以a為例,a定義為該struct的0~2 bits,其取值就是b000~b111,即(0~7)
b則是,3~6 bits,其取值就是b0000~b1111,即(0~15)

詳見http://ke..com/view/1256879.htm

㈧ 關於C語言中位域的問題

不是8位啦 是位域長不能超過變數指定類型
比如int a; 如果int長度為8位 則范圍不能大於8
其實一般來說int長度是16位 並用根據編譯器和具體機器而變動
上面的程序里uint32的長度是32(根據名字猜的)
所以只要范圍不大於32即可

㈨ c語言 關於位域的使用

一、位域
有些信息在存儲時,並不需要佔用一個完整的位元組,
而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1
兩種狀態,
用一位二進位即可。為了節省存儲空間,並使處理簡便,C語言又提供了一種數據結構,稱為「位域」或「位段」。所謂「位域」是把一個位元組中的二進位劃分為幾個不同的區域,
並說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。
這樣就可以把幾個不同的對象用一個位元組的二進制位域來表示。一、位域的定義和位域變數的說明位域定義與結構定義相仿,其形式為:
struct
位域結構名
{
位域列表
};
其中位域列表的形式為:
類型說明符
位域名:位域長度

struct
bs
{
int
a:8;
int
b:2;
int
c:6;
};
位域變數的說明與結構變數說明的方式相同。
可採用先定義後說明,同時定義說明或者直接說明這三種方式。例如:
struct
bs
{
int
a:8;
int
b:2;
int
c:6;
}data;
說明data為bs變數,共占兩個位元組。其中位域a佔8位,位域b佔2位,位域c佔6位。對於位域的定義尚有以下幾點說明:
1.
一個位域必須存儲在同一個位元組中,不能跨兩個位元組。如一個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:
struct
bs
{
unsigned
a:4
unsigned
:0
/*空域*/
unsigned
b:4
/*從下一單元開始存放*/
unsigned
c:4
}
在這個位域定義中,a占第一位元組的4位,後4位填0表示不使用,b從第二位元組開始,佔用4位,c佔用4位。
2.
由於位域不允許跨兩個位元組,因此位域的長度不能大於一個位元組的長度,也就是說不能超過8位二進位。
3.
位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:
struct
k
{
int
a:1
int
:2
/*該2位不能使用*/
int
b:3
int
c:2
};
從以上分析可以看出,位域在本質上就是一種結構類型,
不過其成員是按二進位分配的。
二、位域的使用
位域的使用和結構成員的使用相同,其一般形式為:
位域變數名·位域名
位域允許用各種格式輸出。
main(){
struct
bs
{
unsigned
a:1;
unsigned
b:3;
unsigned
c:4;
}
bit,*pbit;
bit.a=1;
bit.b=7;
bit.c=15;
printf("%d,%d,%d\n",bit.a,bit.b,bit.c);
pbit=&bit;
pbit->a=0;
pbit->b&=3;
pbit->c|=1;
printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);
}
上常式序中定義了位域結構bs,三個位域為a,b,c。說明了bs類型的變數bit和指向bs類型的指針變數pbit。這表示位域也是可以使用指針的。
程序的9、10、11三行分別給三個位域賦值。(
應注意賦值不能超過該位域的允許范圍)程序第12行以整型量格式輸出三個域的內容。第13行把位域變數bit的地址送給指針變數pbit。第14行用指針方式給位域a重新賦值,賦為0。第15行使用了復合的位運算符"&=",
該行相當於:
pbit->b=pbit->b&3位域b中原有值為7,與3作按位與運算的結果為3(111&011=011,十進制值為3)。同樣,程序第16行中使用了復合位運算"|=",
相當於:
pbit->c=pbit->c|1其結果為15。程序第17行用指針方式輸出了這三個域的值。

㈩ C語言int的取值范圍

C語言int的取值范圍在32/64位系統中都是32位,范圍為-2147483648~+2147483647,無符號情況下表示為0~4294967295。

C/C++編程語言中,int表示整型變數,是一種數據類型,用於定義一個整型變數,在不同編譯環境有不同的大小,不同編譯運行環境大小不同。

C的數據類型包括:整型、字元型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。

基本數據類型:

void:聲明函數無返回值或無參數,聲明無類型指針,顯示丟棄運算結果。(C89標准新增)

char:字元型類型數據,屬於整型數據的一種。(K&R時期引入)

int:整型數據,表示範圍通常為編譯器指定的內存位元組長。(K&R時期引入)

float:單精度浮點型數據,屬於浮點數據的一種。(K&R時期引入)

double:雙精度浮點型數據,屬於浮點數據的一種。(K&R時期引入)

_Bool:布爾型(C99標准新增)

_Complex:復數的基本類型(C99標准新增)

_Imaginary:虛數,與復數基本類型相似,沒有實部的純虛數(C99標准新增)

_Generic:提供重載的介面入口(C11標准新增)

(10)c語言位域的取值擴展閱讀:

1989年,ANSI發布了第一個完整的C語言標准——ANSI X3.159—1989,簡稱「C89」,不過人們也習慣稱其為「ANSI C」。

C89在1990年被國際標准組織ISO(International Standard Organization)一字不改地採納,ISO官方給予的名稱為:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被簡稱為「C90」。

1999年,在做了一些必要的修正和完善後,ISO發布了新的C語言標准,命名為ISO/IEC 9899:1999,簡稱「C99」。

在2011年12月8日,ISO又正式發布了新的標准,稱為ISO/IEC9899: 2011,簡稱為「C11」。