zoukankan      html  css  js  c++  java
  • 位域

    1.位域:与位运算有关系,与结构体也有关系。

    • int a:4;表示a只占4位。这就是位域,限定数据的位数,主要是为了节约内存。
    • 如果输入, int a:4; 那么默认是会留一个符号位,所以你可以用的就是3位。若需要无符号的需要加上unsigned。

    2.类型相同是多个数据能重合就重合 。

    struct test
    {
        unsigned int num1:1;
        unsigned int num2:1;
    };
    sizeof(struct test);    这时test的大小是4个字节,


    3.若是类型不同,则遵循结构体对齐原则。
    一个位域必须存储在同一个字节中,不能跨两个字节。如果一个字节所剩空间不够存放另一位域是,应从下一单元起存放该位域。也可以有意识某位域从下一单元开始。

    4.在计算机中,补码在内存中的排列是,  低位在低字节,高位在高字节。高位就是1,低位就是0。比如0000 0001就是1000 0000这样子存储的。如果要打印,则就需要逆序打印。

    5.现代的手机(android和ios),电脑,都是低位低字节,linux也是,unix服务器是例外。

    位域操作:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct bits
    {
        unsigned char ch1 : 1;
        unsigned char ch2 : 1;
        unsigned char ch3 : 1;
        unsigned char ch4 : 1;
        unsigned char ch5 : 1;
        unsigned char ch6 : 1;
        unsigned char ch7 : 1;
        unsigned char ch8 : 1;
    };
    
    int main()
    {
        //printf("大小是:%d",sizeof(struct bits));
        int data = 1;
        int length = 4;
        struct bits *p = &data;
    
        while (length--)
        {
            printf("%d%d%d%d% d%d%d%d
    ",
                (p + length)->ch8,
                (p + length)->ch7,
                (p + length)->ch6,
                (p + length)->ch5,
                (p + length)->ch4,
                (p + length)->ch3,
                (p + length)->ch2,
                (p + length)->ch1
            );
        }
        system("pause");
    }
  • 相关阅读:
    HDU 2045 不容易系列之(3)—— LELE的RPG难题 (递推)
    HDU 2050 折线分割平面 (递推)
    HDU 5441 Travel (并查集+数学+计数)
    HDU 4597 Play Game (DP,记忆化搜索,博弈)
    HDU 4599 Dice (概率DP+数学+快速幂)
    HDU 4497 GCD and LCM (数学,质数分解)
    UVa 1312 Cricket Field (枚举+离散化)
    HDU 4499 Cannon (暴力求解)
    HDU 4496 D-City (并查集)
    javascript你不知道的知识点
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5695439.html
Copyright © 2011-2022 走看看