由于運算<<符中的1 個運算元屬于long long型別,并且答案應存盤為long long,我對這種行為感到有些驚訝 誰能解釋為什么會發生這種情況?
例如:
#include<bits/stdc .h>
using namespace std;
int main(){
long long p=33;
long long a = 1<<p;
cout<<a;
} //This gives the wrong output
int main(){
long long a = 1ll<<33;
cout<<a;
} //this gives right output
uj5u.com熱心網友回復:
C 11 (N3690) 5.8 移位運算子 [expr.shift] p1:
運算元應為整數或無作用域列舉型別,并執行整數提升。結果的型別是提升的左運算元的型別。
所以型別為1 << iis int,而1LL << i有 type long long,它通常可以表示更大范圍的值。
移位運算子在這里很特別;大多數其他運算子遵循通常的算術轉換[5 p10],這會導致兩個運算元轉換為相同型別,粗略地說是兩者中較大的一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368064.html
