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);//或这样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值