2
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;
}
這將寫入1和30x 0這是沒關係的。但我需要的是讓最高位的1位,即在第一個位置 - 接着是31x零。但是當我嘗試val < < = 31;沒有什麼是寫的,我不明白。你能爲我澄清一下嗎?int的二進制移位不可能
謝謝
沒有被寫入裝置,該前k個被評估除Val更大。所以要麼你沒有正確使用unsigned,你的體系結構只有31位寬或者遇到了一個編譯器錯誤。順便說一句,發出二進制表示的方式非常奇怪,我只是從最高位開始,並在第一個非零位發出字符。這些前置插入的成本要比測試最差情況下的n-1比特要多得多(除非你使用的是非常長的數字)。我知道當前體系結構正在使用的最大C字長度:長128位。 – datenwolf 2011-03-20 12:19:16