位变量

作者: EJ17zj | 来源:发表于2017-08-08 20:50 被阅读47次

位域

今天遇到一个题要求用一个字节存储两个变量信息并进行相应的计算,发现了一种专业课学过却很少使用的一种结构声明方式,称为位域。示例如下:

struct {
    unsigned char a : 4;
    unsigned char b : 4;
}i;

这种声明方式得到的变量是指定位数的,可以比较方便地处理一些问题。
下面说下这种结构体的性质:

cout << sizeof(i);//输出1
i.a = 2;
i.b = 1;
cout << *((unsigned int*)&i);//输出18

也就是说,示例中的结构体,相当于一个unsigned char变量,并且a、b分别表示unsigned char变量的低4位、高4位。
另外,位域结构体还有多种类型变量的声明、指定对齐方式等多种用法,可搜索位域了解更多,这里不再展开。

bitset类

C++标准库中提供了bitset类,在需要使用位变量时推荐使用bitset类而不是位域,毕竟模板类有更多玩法且使用方便。
具体用法可点相应链接查看示例代码。

std::bitset
Defined in header <bitset>
The class template bitset represents a fixed-size sequence of N bits. Bitsets can be manipulated by standard logic operators and converted to and from strings and integers.

Element access
[ ] 访问指定位
test 同[ ],但会进行越界检测
all any none all全部位为true则返回true,否则返回false;其余类似
count 返回位为true的个数
Capacity
size
Modifiers
& | ^ ~ 与 或 异或
<<= >>= << >> 移位操作符
set 设某位为true
reset 设某位为false
flip 翻转变量或某位
Conversions
to_string 转换为string返回,可指定位表示符
to_ulong
to_ullong

相关文章

  • 位变量

    位域 今天遇到一个题要求用一个字节存储两个变量信息并进行相应的计算,发现了一种专业课学过却很少使用的一种结构声明方...

  • 10.30

    32 位和 64 位的 JVM,int 类型变量的长度是多数?32 位和 64 位的 JVM 中,int 类型变量...

  • 2019-05-20

    一个实战型策略 变量x(昨日收盘点位),变量y(今日9点35分的点位),变量z=(y-x)/2 If z≥0: 当...

  • 位运算交换两变量

    位运算交换两变量 因为 a ^ a = 0, 0 ^ a = a两次异或不改变原值:a ^ a ^ a = a; ...

  • coreJava_4——变量、操作符相关

    -局部变量-实例变量(也叫成员变量、全局变量)-操作符(赋值、比较、相等、数学运算、移位、位运算、逻辑)-类型转换...

  • 你不知道的JavaScript

    变量和值 JavaScript 整数最大能达到53位。 | 0 可以将变量a 中的数值转换为32 位有符号整数,因...

  • Shell part1.1变量类型

    shell 变量是用一个固定的字符串去表示不固定的内容,便于修改。 ==变量类型== 自定义变量 环境变量 位...

  • Linux 常用命令

    查看linux是32位还是64位: 解压tomat: 配置JDK环境变量在linux下环境变量的配置是通过修改/e...

  • java int型最大值/最小值,最大值+1,最小值-1

    java中,int型变量是有符号整形变量。int型变量占用4个字节(32bit位)。 int型变量采用补码形式来表...

  • 二进制的经典应用-标志位与掩码

    位运算经常被用来创建、处理以及读取标志位序列——一种类似二进制的变量。虽然可以使用变量代替标志位序列,但是这样可以...

网友评论

      本文标题:位变量

      本文链接:https://www.haomeiwen.com/subject/rldxrxtx.html