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);//或这样
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现