Я бег следующей программы: (URL: http://ideone.com/aoJoI5)Понимание того, как долго длится int int?
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long long int N=pow(2, 36);
cout << N <<endl;
int count = 0;
cout << "Positions where bits are set : " << endl;
for(int j=0; j<sizeof(long long int)*8; ++j){
if(N&(1<<j)){
++count;
cout << j << endl;
}
}
return 0;
}
Эта программа дает мне результат, как:
68719476736
Positions where bits are set :
31
63
Теперь, как я использую N = 2^36, что означает 36-й бит должны быть 1 и ничего больше, но почему программа дает мне позицию 31 и 63? что-то не так с моей программой?
У меня есть одно замечание, что если мы используем N = 2^{exp}, где exp> = 32, он всегда дает позиции для заданного бита равным 31 и 63. Может кто-нибудь объяснить, почему это происходит?
'1 << j' может привести к слишком большому сдвигу. Вместо этого следует использовать '1ull << j'. – MikeCAT
@MikeCAT Спасибо, что сработал. – LovelyGuyAnSh
@MikeCAT: Пожалуйста, не используйте раздел комментариев для ответов. Если вы не хотите представителя, вы можете вернуть сообщество, наделив его. –