`
hqs7636
  • 浏览: 220924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

std.bitmanip

 
阅读更多

Jump to: bitfields FloatRep DoubleRep BitArray opIndex opIndexAssign dup opApply reverse sort opEquals opCmp init opCast opCom opAnd opOr opXor opSub opAndAssign opOrAssign opXorAssign opSubAssign opCatAssign opCat opCat_r

Bit-level manipulation facilities.

Authors:
Walter Bright, Andrei Alexandrescu


template bitfields(T...)
Allows creating bit fields inside structs and classes.

Example:

struct A
{
    int a;
    mixin(bitfields!(
        uint, "x",    2,
        int,  "y",    3,
        uint, "z",    2,
        bool, "flag", 1));
}
A obj;
obj.x = 2;
obj.z = obj.x;
The example above creates a bitfield pack of eight bits, which fit in one ubyte. The bitfields are allocated starting from the least significant bit, i.e. x occupies the two least significant bits of the bitfields storage.

The sum of all bit lengths in one bitfield instantiation must be exactly 8, 16, 32, or 64. If padding is needed, just allocate one bitfield with an empty name.

Example:

struct A
{
    mixin(bitfields!(
        bool, "flag1",    1,
        bool, "flag2",    1,
        uint, "",         6));
}
The type of a bit field can be any integral type or enumerated type. The most efficient type to store in bitfields is bool, followed by unsigned types, followed by signed types.


struct FloatRep;
Allows manipulating the fraction, exponent, and sign parts of a float separately. The definition is:


struct FloatRep
{
    union
    {
        float value;
        mixin(bitfields!(
                  uint,  "fraction", 23,
                  ubyte, "exponent",  8,
                  bool,  "sign",      1));
    }
}



struct DoubleRep;
Allows manipulating the fraction, exponent, and sign parts of a double separately. The definition is:


struct DoubleRep
{
    union
    {
        double value;
        mixin(bitfields!(
                  ulong,   "fraction", 52,
                  ushort,  "exponent", 11,
                  bool,    "sign",      1));
    }
}



struct BitArray;
An array of bits.


const bool opIndex(size_t i);
bool opIndexAssign(bool b, size_t i);
Support for [index] operation for BitArray.


BitArray dup();
Support for array.dup property for BitArray.


int opApply(int delegate(ref bool) dg);
int opApply(int delegate(ref uint, ref bool) dg);
Support for foreach loops for BitArray.


BitArray reverse();
Support for array.reverse property for BitArray.


BitArray sort();
Support for array.sort property for BitArray.


int opEquals(BitArray a2);
Support for operators == and != for bit arrays.


int opCmp(BitArray a2);
Implement comparison operators.


void init(bool[] ba);
Set BitArray to contents of ba[]


void init(void[] v, size_t numbits);
Map BitArray onto v[], with numbits being the number of bits in the array. Does not copy the data.

This is the inverse of opCast.


void[] opCast();
Convert to void[].


BitArray opCom();
Support for unary operator ~ for bit arrays.


BitArray opAnd(BitArray e2);
Support for binary operator & for bit arrays.


BitArray opOr(BitArray e2);
Support for binary operator | for bit arrays.


BitArray opXor(BitArray e2);
Support for binary operator ^ for bit arrays.


BitArray opSub(BitArray e2);
Support for binary operator - for bit arrays.

a - b for BitArrays means the same thing as a & ~b.


BitArray opAndAssign(BitArray e2);
Support for operator &= bit arrays.


BitArray opOrAssign(BitArray e2);
Support for operator |= for bit arrays.


BitArray opXorAssign(BitArray e2);
Support for operator ^= for bit arrays.


BitArray opSubAssign(BitArray e2);
Support for operator -= for bit arrays.

a -= b for BitArrays means the same thing as a &= ~b.


BitArray opCatAssign(bool b);
BitArray opCatAssign(BitArray b);
Support for operator ~= for bit arrays.


BitArray opCat(bool b);
BitArray opCat_r(bool b);
BitArray opCat(BitArray b);
Support for binary operator ~ for bit arrays.


分享到:
评论

相关推荐

    std.out for proe

    std.out for proe

    hdc_std.zip

    《hap包上传工具——hdc_std.zip深度解析》 在IT行业中,开发和调试工作往往离不开各种工具的辅助,尤其在移动应用开发领域,高效便捷的工具能够大大提高工作效率。今天我们要探讨的是一款名为“hdc_std.zip”的...

    dd-wrt.v24-9517_VINT_std.bin

    dd-wrt.v24-9517_VINT_std.bin固件

    Setup-gen-PCIMC6-8.313.0-CHN-6B_std.exe

    pm53C软件 pm53C软件 Setup-gen-PCIMC6-8.313.0-CHN-6B_std.exe

    stdint.h头文件

    `stdint.h` 头文件是C语言编程中用于定义固定宽度整型数据类型的重要标准库。这个头文件在C99标准中被引入,目的是为了提供具有确定大小和符号的整数类型,使得代码可以在不同架构和平台之间具有更好的可移植性。在...

    WeGameMiniLoader.std.5.11.28.1030.exe.cab

    WeGameMiniLoader.std.5.11.28.1030.exe.cab

    RAV V16std.exe

    注册瑞星积分账号,获得新人积分奖励,还可进入专属活动页,领取活动奖励。积分可参与抽奖或兑换相应优惠。

    全部stdint.h1

    `stdint.h` 头文件是 C99 标准引入的一个关键组成部分,它为程序员提供了标准化的整数类型,以确保在不同的平台和体系结构上具有可预测的行为和大小。这个头文件的主要目的是解决 C 语言中不同编译器可能对整数类型...

    stdint.h兼容C语言头文件

    ### stdint.h兼容C语言头文件详解 #### 一、引言 `stdint.h`是C语言中的一个标准头文件,用于定义固定宽度整数类型。这些类型在不同平台上具有一致的大小,有助于提高代码的可移植性。本文将详细介绍`stdint.h`...

    无法打开包括文件:“stdint.h”

    fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的。 解决办法:下载文件之后将文件移动到...

    ruamelmod:ruamel.std.zip文件已修改以进行加密

    ruamel.std.encryptedzip是一个经过修改的库,它向ruamel.std.zipfile添加了对加密zip存档的支持; 链接在下面。 这非常简单,它只是向API添加了一个额外的参数: def delete_from_zip_file ( self , pattern = ...

    stdint.h和inttypes.h头文件

    可以用来解决VC不包含stdint.h头文件问题,网上下载的很多工程项目经常使用的两个头文件inttypes.h stdint.h,将头文件放到(以VS2008为例):C:\Program Files\Microsoft Visual Studio 9.0\VC\include(装在C盘时...

    stdint.h 下载

    `stdint.h` 是一个在C语言编程环境中常用的头文件,主要包含了各种整数类型的定义,这些类型具有固定的字节大小和二进制表示,对于跨平台编程和内存管理非常重要。在C99标准中,`stdint.h` 被正式引入,为程序员提供...

    VS2005编译 提示无法打开包括头文件“stdint.h“

    由于代码中使用了头文件<stdint.h> 但是VS2005缺少头文件stdint.h,所以在"VS2005安装路径/VC/include"(例:C:\softwore\VS2005\VC\include)路径下添加stdint.h文件即可。

    freeglut_std.h

    1. Dynamic link library file (. DLL) glaux.dll, glu32.dll, glut32.dll, OPENGL32.DLL, glut.dll。 2. Header file (. H) GL.H, GLAUX.H, GLU.H, glut.h。 3. Library file (. LIB) GLAUX.LIB、Glu32.lib... 报错 双

    vs2008的stdint.h

    vs2008编译提示Cannot open include file: 'stdint.h': No such file or directory,是因为vs2008没有这个文件,下载完放到你vs2008安装目录下的include就行了,我本地默认目录是C:\Program Files (x86)\Microsoft ...

    matlab2012b_std.dat

    matlab最新license,亲测绝对可用,已经更新了原有license部分模块不能用的问题,另外可以无限期使用,不涉及到期问题,欢迎各位童鞋下载

    virtualdac105d26std.exe

    virtualdac105d26std.exe

    stdint.h文件

    `stdint.h` 和 `inttypes.h` 是C语言标准库中的两个重要头文件,它们主要提供了固定宽度整型数据类型和相关的格式化输入/输出函数。在编写跨平台或者需要精确控制整数位宽的代码时,这两个头文件非常有用。 `stdint...

    fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory

    fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory 【错误】fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory 【原因】stdint.h是c99标准的头文件,vc不...

Global site tag (gtag.js) - Google Analytics