为什么这个按位操作的if语句的变化会导致错误
why does a variation in the if statement of this bitwise operation cause an error?
我正在写一个函数来打印位,但我遇到了一个问题。这两个for循环在我看来是一样的,但由于某种原因,被注释掉的那个没有打印正确的位。
int main()
{
unsigned int bits = 0x570FA1;
unsigned int mask = 0x800000;
printBits(bits, 24, mask);
return 0;
}
void printBits(unsigned int bit, int numbOfBits, unsigned int& mask){
for (int i = 1; i <= numbOfBits; i++){
if ((mask & bit) == 0 ){
cout << "0";
}
else {
cout <<"1";
}
mask = mask >> 1;
if ( i %4 == 0 ){
cout << " ";
}
}
/* for(int i= 1 ; i <= numbOfBits ; i++ ){
if ((mask & bit) ==1){
cout << "1";
}
else{
cout << "0";
}
mask = mask >> 1;
if(i% 4 ==0){
cout << " ";
}
}*/
}
原因很简单:掩码值可能从128开始,然后右移到64、32等等。所以,在…
if ((mask & bit) == 0 ){
…如果设置了掩码位,按位与运算将返回掩码位,一切都如预期的那样工作。但在…
if ((mask & bit) ==1){
按位与返回可能大于1的掩码位:例如128 != 1
,即使您正在测试的位是设置的,您也错误地认为它是关闭的。只有当mask
最终右移到1
时,它才会起作用。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 使用单词变化C 不是操作员时的奇怪错误
- 8 皇后区变化 - 安排回溯实施的数量 - 错误的输出
- 升灵气:轻微规则变化的编译错误
- 为什么在嵌套调用中参数值发生变化并导致分段错误
- 为什么这个按位操作的if语句的变化会导致错误