当前位置:网站首页>C language - bit segment

C language - bit segment

2022-07-06 08:03:00 Orange cat

Bit segment

  • What is a bit segment ?
    C Language allows bits in a structure (bit) Specifies the memory length of its members in units
    Such members in bits are called bit segments . With bit segments, data can be stored in fewer bits .

Example :
 Insert picture description here

  • above _a : 2 It means occupy 2 individual bit position
    _b : 5 It means occupy 5 individual bit position
    _c : 10 It means occupy 10 individual bit position
    _d : 30 It means occupy 30 individual bit position

  • Review your knowledge :
    8 bit = 1 byte
    4 byte = A plastic surgery (int)

All the members above add up to 47 bit, Is probably The size of two reshapes
Then why is the answer 8 ?
So how does the median segment of the structure in the above example allocate space ?

Bit segment memory allocation

  1. The members of a segment can be int unsigned int signed int Or is it char ( It belongs to the plastic family ) type
  2. The space of the bit segment is based on 4 Bytes ( int ) perhaps 1 Bytes ( char ) The way to open up .
  3. Bit segments involve many uncertainties , Bit segments are not cross platform , Pay attention to portable program should avoid using bit segment
  4. The number of bits occupied by the bit field cannot exceed the maximum number of bits that the basic type can represent
    That is, bit segments cannot be stored across bytes . for example :int It is Zhan 4 Bytes , Then it can only be 32 bit position , It can't be exceeded

Example :

struct S
{
    
 char a:3;
 char b:4;
 char c:5;
 char d:4;
};
int main()
{
    
	struct S n = {
     0 };
	n.a = 10;
	n.b = 12;
	n.c = 3;
	n.d = 4;
	return 0;
}

The illustration :
This is vs 2022 Compiler test data

 Insert picture description here

 Insert picture description here

  • I said before The space of the bit segment is according to 4 Bytes ( int ) perhaps 1 Bytes ( char ) The way to open up
    So the first time is to open up 4 individual int Type of space
  • Bit segment in A byte Internal data is used first Low address In the use of High address , Use... From right to left (char type )
    If it is int type , It's a plastic surgery from right to left
  • When there is not enough space left in one space for the next member , It will be wasted
  • Don't give it a name in the position segment , Unable to access the bit segment , But the calculation size still takes up space
  • The bit segment cannot be & Address fetch operation

The cross platform problem of bit segment

  1. int It's uncertain whether a bit segment is treated as a signed number or an unsigned number .
  2. The number of the largest bits in the bit segment cannot be determined
    for example :16 The machine is the largest 16,32 The machine is the largest 32, It's written in 27, stay 16 It's a plane
    There will be problems with the device .
  3. The members in the bit segment are allocated from left to right in memory , Or right to left allocation criteria have not yet been defined .
  4. When a structure contains two bit segments , The second segment is relatively large , Cannot hold the remaining bits of the first bit segment , yes
    Discard the remaining bits or use , This is uncertain .
  • summary : Compared to the structure , Bit segments can achieve the same effect , But it can save a lot of space , But there are cross platform problems
原网站

版权声明
本文为[Orange cat]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060757394463.html