int的二进制移位是不可能的

tsu*_*nka 2 c++ bit-shift

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; 没有写,我不明白.你能帮我澄清一下吗?

谢谢

Cod*_*aos 5

如果你的while循环将不会终止val>= 2^31.

这是因为k == 2^31仍然是<= val,但2^31 << 1 == 2^32溢出,并变为0这仍然小于限制.

如果你也可以延长你的条件k == 0,那么问题就会消失.

(^意思是在这篇文章中取词不是xor)