在给定的int中设置1-3位,只设置1-3位
set bits 1-3 in an int given an int with only bits 1-3 set as desired
unsigned int x = 0xdeadbeef;
unsigned int y = 0x00000006;
unsigned int z = 0xdeadbee7;
如何从x
和y
的值计算出z
的值?
y
的1-3位是011
,我希望x
中1-3位的值被y
的1-3位替换,留下其他位不变。
听起来你应该:
- 掩码1-3位,使它们不能被设置
- 或y 的1-3位的结果
:
// 0xe == 8 + 4 + 2 (i.e. bits 1-3)
z = (x & ~0xe) | (y & 0xe);
注意~
是位逆运算符,所以要清除3位,你取这些位集的逆,并使用逆与当前值的位与。
如果你知道只有1-3位会在y
中设置,你可以使用| y
而不是| (y & 0xe)
。
(注意,我假设"bits 1-3"是指值为8,4和2的位,使用从0开始的正常比特计数机制。如果你指的是"底部三位",那通常是0-2位,你应该在代码中使用7而不是0xe。
相关文章:
- 如何在24位SDL_Surface上设置像素的颜色
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 您可以使用 setfill() 来设置 fill 2 位数字吗?
- 位设置为浮点数或双精度值 c++
- 难以从 CImageList 设置菜单项位图
- c++只关心2位小数,没有设置精度
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 哪个是设置位的最佳方法以及为什么?
- 如何检查 int 中是否恰好设置了一位?
- 布尔值是否需要在C++中表示为真时设置为 1 位/假时设置为 0 位
- 如何找出在两个整数的乘积中设置了多少位(等于 1)
- 在布尔值中设置额外的位使其同时为真和为假
- 标志-检查是否设置了位并且仅设置了这些位
- 是否可以在 C++11 中手动设置 istream 故障位
- 给定一个uint8_t,找出设置了多少位
- 什么是清除和设置用于的位以及为什么有用
- 如何测试是否所有位都已设置或所有位都未设置
- 设置uchar的位
- 尝试从文件读取时设置了失败位-原因
- 在给定的int中设置1-3位,只设置1-3位