rust - 如何修改Rust中给定位置的位值?
问题描述
我可以用 1 替换该值,但不能用 0 替换。下面程序的输出是0b11111111
. 理想情况下应该是0b11110000
。请让我知道我在这里缺少什么。
use std::mem;
fn main() {
let a: u8 = 0b00001111;
let b: u8 = 0b11111111;
let c: u8 = 0b00000000;
let length = mem::size_of_val(&a) * 8;
let mut p : u8 = b;
for n in 0..length {
if (a >> n & 1) == 0b1 {
let d = c >> n & 1;
p = p | (d << n);
}
}
println!("0b{:08b}", p);
}
解决方案
这不是特定于生锈的。
True | x => True
True & x => x
True ^ x =? ¬x
False | x => x
False & x => False
False ^ x => x
所以对于你的价值观
a | b == 0b11111111
a ^ b == 0b11110000
a & b == 0b00001111
就您的代码而言,在a >> n & 1 == 0
. 你需要使用类似的东西
let d = b ^ (1<<n); // switch nth bit - gives something like 0b11101111
p = p & d; // leaves all bits untouched except nth which is set to 0
推荐阅读
- python-3.x - Django - 类型错误;有多个参数值
- python - 如何使用子函数重新启动 Python 脚本
- ms-access-2010 - 在访问表中搜索字段名称,然后使用值更新相关字段名称 delphi 7
- r - 改变周末积分的颜色
- azure - 使用脚本重新创建 cosmos DB
- php - PHP - 读取 BLOB 文件的内容
- javascript - 我可以从捆绑的 javascript 应用程序中加载文件吗?
- python - 如何在 Python 模块设置中设置额外的链接参数?
- c - 从 Linux shell 向 C 代码提供输入参数
- php - 修改通过 PHPRedis 管道返回的数组以包含键作为每个数组元素的索引