我發現一些有線問題,當我嘗試做32次左移時。測試函數中的代碼應該打印出相同的結果0x0,但我得到了「ffffffff,0」。任何人都可以暗示代碼有什麼問題?謝謝!按位左移意外結果
int test(int n) {
int mask = ~0 << (32 + ~n + 1);
int mask1 = ~0 << (32 + ~0 + 1);
printf("%x, %x\n", mask, mask1);
return mask;
}
int main(){
test(0);
}
同樣與http://stackoverflow.com/questions/3784996/why-does-left-shift-operation-invoke-undefined-behaviour-when-the-left-side-oper – MOHAMED 2013-05-07 16:30:07
你可以嘗試製作int聲明一個unsigned int並告訴我們它是否會有所作爲? – 2014-01-07 19:54:14