循环中无法执行<<位移位操作问题求助
问题分析与修复方案
- 核心问题几乎可以确定是循环中使用左移运算符时,未将运算结果重新赋值给原变量。
多数编程语言里,<<运算符的作用是返回左移后的新值,不会直接修改原变量;而.set()、.test()这类位操作方法是直接对原对象进行修改,因此能正常生效。 - 举个典型错误示例(以C++ bitset为例):
// 错误写法:左移后未更新原变量 bitset<8> bits(0b00000001); for(int i=0; i<3; i++){ bits << 1; // 仅计算左移结果,未将结果存回bits cout << bits << endl; // 每次输出都是初始值00000001 } - 修正方法有两种:
- 使用左移赋值运算符
<<=,直接修改原变量:bitset<8> bits(0b00000001); for(int i=0; i<3; i++){ bits <<= 1; cout << bits << endl; // 依次输出00000010、00000100、00001000 } - 显式将左移结果重新赋值给原变量:
bitset<8> bits(0b00000001); for(int i=0; i<3; i++){ bits = bits << 1; cout << bits << endl; }
- 使用左移赋值运算符
- 如果是Python这类语言(int为不可变类型),同样需要重新赋值才能更新变量:
x = 1 for _ in range(3): x = x << 1 # 必须重新赋值,否则x始终保持初始值 print(bin(x))
内容的提问来源于stack exchange,提问作者a lingis
相关产品推荐
相关产品推荐

