Может ли кто-нибудь объяснить это поведение?
#include <iostream>
using namespace std;
int main(){
for(int i = 0; i <= 32; i++){
unsigned long test = 1u << i;
cout << test << endl;
}
}
выводит:
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
2147483648
1
Что имеет смысл до конца.Операторы сдвига битов не должны переноситься, но здесь, похоже, именно это и делается.Я предполагаю, что это потому, что литерал '1u' является меньшим типом, чем беззнаковый long.Использование «1ul» вместо этого делает поведение совершенно нормальным, поэтому с преобразованием типов должно что-то происходить, но мне любопытно точно знать, что и почему!