首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【编程基础】C语言位

【编程基础】C语言位

作者头像
程序员互动联盟
发布2018-03-13 16:56:42
发布2018-03-13 16:56:42
9.9K00
代码可运行
举报
运行总次数:0
代码可运行

位制就是为了减小存储大小,把一个char, unsigned int, int的存储空间进行拆分后,对每个进行操作。 给出一段代码:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <stdlib.h>
typedef struct test{    
    char a: 4;    
    char b: 1;    
    char c: 1;
}test;

int main(){
    test m; 
    m.a = 3;    
    m.b = 3;    
    m.c = 3;    
    printf("%d/n" ,sizeof(test));
    printf("%d/n" ,sizeof(char));
    return 0;
}

上面的代码运行后发现,输出为1 ,1。

也就是说,test的长度和char的长度是一样的。其实说白了test就是把一个char类型的存储空间,拆分成4位,1位,1位的存储空间进行操作。

下面,如果test里的大小类型不一致呢:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <stdlib.h>

typedef struct test{    
    char a: 4;    
    char b: 1;    
    int c: 1;
}test;

int main(){ 
    test m;    
    m.a = 3;    
    m.b = 3;    
    m.c = 3;    
    printf("%d/n" ,sizeof(test));
    printf("%d/n" ,sizeof(char));    
    printf("%d/n" ,sizeof(int));
    return 0;
}

代码输出为 8, 1, 4。

这里应该是有一个对其的概念,也就是说test把char类型的也扩张成4字节的了,为了跟int的对齐。

对位制,不能把设置的位数长度大于类型的长度,比如

代码语言:javascript
代码运行次数:0
运行
复制
typedef struct test{
    char a: 10;    
    char b: 1;    
    char c: 8;
}test;

这里10已经超过了char类型的长度,所有编译错误。

还有对于如果总长度大于设置的类型呢

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <stdlib.h>

typedef struct test{    
    char a: 8;    
    char b: 1;    
    char c: 8;
}test;

int main(){ 
    test m;    
    m.a = 3;    
    m.b = 3;    
    m.c = 3;    
    printf("%d/n" ,sizeof(test));    
    printf("%d/n" ,sizeof(char));    
    return 0;
}

输出结果为3, 1 可以看出来,test自动分配了三个char类型的空间。大体了解了吧。

本文摘自:南岭以北

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档