usigned int val = 1;
val <<= 30;
cout << intToBin(val) << endl;
string intToBin(unsigned int val) {
unsigned int k=1;
string ret;
while (k <= val) {
if (k & val) {
ret.insert(0,"1");
} else {
ret.insert(0,"0");
}
k <<= 1;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
这将写1和30x 0,这是正常的.但我需要的是在最高位上有1,意思是在第一个位置 - 然后是31x零.但当我尝试val << = 31; 没有写,我不明白.你能帮我澄清一下吗?
谢谢
如果你的while循环将不会终止val的>= 2^31.
这是因为k == 2^31仍然是<= val,但2^31 << 1 == 2^32溢出,并变为0这仍然小于限制.
如果你也可以延长你的条件k == 0,那么问题就会消失.
(^意思是在这篇文章中取词不是xor)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |