37用d编程位操作

最小可处理的,就是8位,
writefln("%s is %s byte(s)", bool.stringof, bool.sizeof);
所以bool实际上是一个字节.而不是1位.计算机一次至少读一个字节.
寄存器:32位的4字节大小.64位的8字节大小.

import std.stdio;

void main() {
    //1073741824                     4 1
    int number = 0b_01000000_00000000_00000000_00000101;//32位
    writeln(number);
    int number = 0b_10000000_00000000_00000000_00000000;
//最前的1.
    writeln(number);
    uint number = 0b_10000000_00000000_00000000_00000000;
//正数
    writeln(number);
    uint number = 0x_0030_a00f;
    writeln(number);
}

位操作,最好都是数.

import std.stdio;

void print(uint number) {
    writefln("  %032b %08x %10s", number, number, number);
}

void main() {
    print(123456789);
}

~表示数.每个位都翻转了.& | ^(异或).A ^A==0(清0).
>>,<<,>>>(正右移)
>>:最右边的丢掉了.对数,最左边的用0填充.
整类型.有个符号扩展.如果为负数,则最左边为1(负).符号扩展右移时保持正负号.

    uint value = 123456789;

    print(value ^ value);

    uint value = 123456789;
    print(value);
    print(value >> 2);

    int value = 0x80010300;
    print(value);
    print(value >> 3);

    int value = 0x40010300;
    print(value);
    print(value >> 3);

    int value = 0x80010300;
    print(value);
    print(value >>> 3);//正右移,最左边始终为0

不管表达式类型和最左边的值的位.正右移,始终用0填充.

    uint value = 123456789;
    print(value);
    print(value << 4);//左移

赋值操作符:&=, |=, ^=, >>=, >>>=, 和 <<=.
|有1,则为1.&有0,则为0
右移1位,除以2. 左移1位,乘以2.
位运算可用来设置标志.

enum Realism {
    fuelUse    = 1 << 0,
    bodyDamage = 1 << 1,
    tireUse    = 1 << 2,
    skidMarks  = 1 << 3
}
    Realism flags = Realism.tireUse | Realism.skidMarks;
    writefln("%b", flags);
//查询
 if (flags & Realism.fuelUse) {
        //燃料代码
    }

    if (flags & Realism.tireUse) {
        // 轮胎代码
    }
...

掩码.

uint value = 123456789;
    uint mask  = 0x000000ff;
//或
   uint mask  = 0xff000000;

    write("value :"); print(value);
    write("mask  :"); print(mask);
    write("result:"); print(value & mask);
 print((value & mask) >> 24);//或这样

posted @   zjh6  阅读(17)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示