最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++位段超詳細(xì)整理大全

 更新時(shí)間:2024年01月11日 09:30:59   作者:貌美不及玲瓏心,賢妻扶我青云志  
以位為單位來定義結(jié)構(gòu)體中的成員變量所占的空間內(nèi)存,含有位段的結(jié)構(gòu)體稱為位段結(jié)構(gòu),這篇文章主要給大家介紹了關(guān)于C/C++位段的相關(guān)資料,需要的朋友可以參考下

什么是位段?

位段的聲明與結(jié)構(gòu)是類似的,但是有兩個(gè)不同:

  • 位段的成員必須是 int、unsigned int 或signed int 等整型家族。
  • 位段的成員名后邊有一個(gè)冒號和一個(gè)數(shù)字

這是一個(gè)結(jié)構(gòu)體

struct S
{
	int a;
	int b;
	int c;
	int d;
};

這是一個(gè)位段

struct A
{
	int a : 2;
	int b : 5;
	int c : 10;
	int d : 30;
};

位段的樣子看起來奇奇怪怪的,那個(gè)冒號和后面的數(shù)字是什么意思呢?

位段位段,它名字里的“位”就是二進(jìn)制位。

冒號和后面的數(shù)字其實(shí)是它的成員變量在告訴編譯器:

  • 成員a:我只需要2個(gè)比特的空間足以!
  • 成員b:請給我分配5個(gè)比特的空間吧!
  • 成員c:給我來10個(gè)!
  • 成員d:我需要的空間大,給我來40個(gè)比特的空間吧!

每個(gè)成員都得到了自己想要的大小的空間,那么位段A的總大小是多少呢?

我們用sizeof來計(jì)算一下:

#include<stdio.h>

struct S
{
	int a;
	int b;
	int c;
	int d;
};

struct A
{
	int a : 2;
	int b : 5;
	int c : 10;
	int d : 30;
};

int main()
{
	printf("結(jié)構(gòu)體S的大小為:  %d字節(jié)\n", sizeof(struct S));
	printf("位段A的大小為:     %d字節(jié)\n", sizeof(struct A));

	return 0;
}

學(xué)完上一章之后,我們很輕松的計(jì)算出結(jié)構(gòu)體S的大小4*4=16字節(jié)與結(jié)果一致。

再看位段,把成員們所需要的空間大小加起來2+5+10+30=47比特。

已知1字節(jié)=8比特。換算一下位段A的總大小應(yīng)該是6字節(jié)就夠了,可結(jié)果卻是8字節(jié)。

位段的內(nèi)存分配

位段的成員可以是 int unsigned int signed int 或者是 char (屬于 整形家族 )類型。

位段的空間上是按照需要以4個(gè)字節(jié)( int )或者1個(gè)字節(jié)( char )的方式來開辟的。

位段涉及很多不確定因素,位段是不跨平臺的,注重 可移植的程序應(yīng)該避免使用位段 。

首先聲明:位段有很多用法是標(biāo)準(zhǔn)未定義的,也就是說不同的機(jī)器上或者不同的編譯器上內(nèi)存如何

分配都有所差異,所以一下內(nèi)容中有關(guān)內(nèi)存分配的插圖并不是嚴(yán)格正確的?。?!

舉個(gè)例子:

這是一個(gè)成員是int類型的位段:

struct A
{
	int a : 2;
	int b : 5;
	int c : 10;
	int d : 30;
};

這是一個(gè)成員是char類型的位段:

struct S
{
	char a : 3;
	char b : 4;
	char c : 5;
	char d : 4;
};

現(xiàn)在假定義一個(gè)位段的變量并進(jìn)行初始化:

struct S
{
	char a : 3;
	char b : 4;
	char c : 5;
	char d : 4;
};
struct S s = { 0 };
s.a = 10;
s.b = 12;
s.c = 3;
s.d = 4;

其在VS2013環(huán)境下是這樣進(jìn)行存儲(chǔ)數(shù)據(jù)的:

說明數(shù)據(jù)是以二進(jìn)制的方式進(jìn)行存儲(chǔ)的。

再次強(qiáng)調(diào):以上的存儲(chǔ)形式僅僅是vs2013環(huán)境下的,每種不同的編譯器在不同的環(huán)境下都有自己存儲(chǔ)的方式 。

位段的跨平臺問題

問題一:int 位段被當(dāng)成有符號數(shù)還是無符號數(shù)是不確定的。

說明:例如一個(gè)整型存儲(chǔ)的時(shí)候,它的最高位是有符號位還是無符號位是有明確的規(guī)定的,而位段標(biāo)準(zhǔn)并沒有規(guī)定。有的平臺會(huì)當(dāng)作有符號數(shù)處理,有的反之。

問題二:位段中最大位的數(shù)目不能確定。

說明:16位機(jī)器最大16,32位機(jī)器最大32,寫成27,在16位機(jī)器會(huì)出問題。

問題三:位段中的成員在內(nèi)存中從左向右分配,還是從右向左分配標(biāo)準(zhǔn)尚未定義。

說明:

問題四:當(dāng)一個(gè)結(jié)構(gòu)包含兩個(gè)位段,第二個(gè)位段成員比較大,無法容納于第一個(gè)位段剩余的位時(shí),是舍棄剩余的位還是利用,這是不確定的。

說明:

總結(jié):跟結(jié)構(gòu)相比,位段可以達(dá)到同樣的效果,但是可以很好的節(jié)省空間,但是有跨平臺的問題存在。

總結(jié)

到此這篇關(guān)于C/C++位段的文章就介紹到這了,更多相關(guān)C/C++位段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • C語言二叉排序樹的創(chuàng)建,插入和刪除

    C語言二叉排序樹的創(chuàng)建,插入和刪除

    本文主要介紹了Java實(shí)現(xiàn)二叉排序樹的查找、插入、刪除、遍歷等內(nèi)容。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2021-10-10
  • 由static_cast和dynamic_cast到C++對象占用內(nèi)存的全面分析

    由static_cast和dynamic_cast到C++對象占用內(nèi)存的全面分析

    下面小編就為大家?guī)硪黄蓅tatic_cast和dynamic_cast到C++對象占用內(nèi)存的全面分析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++設(shè)計(jì)模式之組合模式

    C++設(shè)計(jì)模式之組合模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之組合模式,本文講解什么是組合模式、組合模式的優(yōu)點(diǎn)、組合模式實(shí)例等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • 關(guān)于c++ 智能指針及 循環(huán)引用的問題

    關(guān)于c++ 智能指針及 循環(huán)引用的問題

    下面小編就為大家?guī)硪黄P(guān)于c++ 智能指針及 循環(huán)引用的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 關(guān)于C++友元函數(shù)的實(shí)現(xiàn)講解

    關(guān)于C++友元函數(shù)的實(shí)現(xiàn)講解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++友元函數(shù)的實(shí)現(xiàn)講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • OpenCV基于背景減除實(shí)現(xiàn)行人計(jì)數(shù)

    OpenCV基于背景減除實(shí)現(xiàn)行人計(jì)數(shù)

    本文主要介紹了如何使用OpenCV C++對視頻中的人流量進(jìn)行統(tǒng)計(jì)。文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)OpenCV有一定的幫助,需要的可以了解一下
    2022-01-01
  • 重構(gòu)-C++實(shí)現(xiàn)矩陣的簡單實(shí)例

    重構(gòu)-C++實(shí)現(xiàn)矩陣的簡單實(shí)例

    下面小編就為大家?guī)硪黄貥?gòu)-C++實(shí)現(xiàn)矩陣的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • C語言實(shí)現(xiàn)樹的動(dòng)態(tài)查找實(shí)例代碼

    C語言實(shí)現(xiàn)樹的動(dòng)態(tài)查找實(shí)例代碼

    這篇文章主要介紹了C語言實(shí)現(xiàn)樹的動(dòng)態(tài)查找實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++ private、protected、public從入門到精通實(shí)例解析

    C++ private、protected、public從入門到精通實(shí)例解析

    本文介紹了C++中的訪問控制關(guān)鍵字public、protected和private,包括它們的定義、規(guī)則和應(yīng)用場景,同時(shí),還探討了繼承中的訪問控制以及友元的概念和使用,文章還提供了面試高頻考點(diǎn)的標(biāo)準(zhǔn)答案,并總結(jié)了開發(fā)中最佳實(shí)踐,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • C++基于遞歸和非遞歸算法求二叉樹鏡像的方法

    C++基于遞歸和非遞歸算法求二叉樹鏡像的方法

    這篇文章主要介紹了C++基于遞歸和非遞歸算法求二叉樹鏡像的方法,針對二叉樹遍歷結(jié)合實(shí)例形式分析了遞歸與非遞歸算法的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-05-05

最新評論

甘南县| 水城县| 东海县| 青岛市| 新和县| 大英县| 同江市| 嘉禾县| 泰顺县| 雷波县| 特克斯县| 平乐县| 永安市| 沂水县| 武胜县| 额济纳旗| 沿河| 长阳| 乐山市| 牟定县| 平远县| 吕梁市| 罗平县| 江口县| 岚皋县| 花莲市| 翁牛特旗| 耿马| 凤翔县| 云林县| 曲靖市| 上蔡县| 凉城县| 阆中市| 磐安县| 师宗县| 临夏市| 延庆县| 宁津县| 呼图壁县| 商南县|