QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1273|回复: 9

请问在c++里可以声明一种长度小于1个字节的数据类型吗?

[复制链接]
发表于 2005-4-23 11:06:39 | 显示全部楼层 |阅读模式
请问在c++里有什么办法可以声明一种长度小于1个字节的数据类型吗?比如一个4个二进制位的数据类型?
发表于 2005-4-23 12:45:54 | 显示全部楼层
只能实现几个小于1字节的数据公用1个字节空间老保存数据,里如用两个4个二进制数组成一个8一个字节:01001011,计算地时候,先用位移提取前面0100,在用位移提取后面1011,分别实现两个只要4个位存储的数据:00000100和00001011
回复

使用道具 举报

发表于 2005-4-23 12:48:18 | 显示全部楼层
但我也没有把握,和许你的要求也可以实现,利用“位域”,你子集差异下关于位域地知识,这方面我不大熟悉。
回复

使用道具 举报

发表于 2005-4-24 13:21:06 | 显示全部楼层
zhangzhaoao说的两种方法都可以,前一种实际也就是“位域”的实现机理,以下是位域的一个例子。

#include <stdio.h>

int main() {
    union {
        int integer;
        struct {
            unsigned int low : 16;
            unsigned int high : 16;
        } field;
    } data;

    scanf("%d", &data.integer);
    printf("= %d * 65536 + %d\n", data.field.high, data.field.low);
}

如果你是想节省空间,首先考虑节省空间是否有意义,因为现在机器的内存已经相当大了,大部分时候完全没有必要牺牲时间来换空间,如果节省空间是必要的,那也应该先考虑使用位操作(bitwise operator)而不是位域(bit field)。

在实际编程中,bit field用得极少,只在解析数据包是有点用,可以简化编程量。
回复

使用道具 举报

发表于 2005-4-24 14:57:35 | 显示全部楼层
讲得很好啊
回复

使用道具 举报

发表于 2005-4-24 14:59:58 | 显示全部楼层
我以前就怕位操作,现在对位移也习惯了,但位域,我还是敬而远之的 :-)
回复

使用道具 举报

发表于 2005-4-25 10:22:31 | 显示全部楼层
我觉得还可以进行取位,也就是"与"操作
回复

使用道具 举报

发表于 2005-4-25 11:51:08 | 显示全部楼层
回复

使用道具 举报

发表于 2005-4-25 15:16:06 | 显示全部楼层
现在是32位机时代,不管是处理1位还是8位,计算机都要补成32位进行处理,所以除了节省存储空间以外,其实并不能提高速度的
回复

使用道具 举报

发表于 2005-4-25 16:34:01 | 显示全部楼层
:-(
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 07:49 , Processed in 0.079319 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表