Вот код:
#include <iostream>
using namespace std;
template<class T>
void printbinary3(T num){
for(int i = sizeof(T) * 8 - 1; i >= 0 ; --i) {
if((1 << i) & num)
cout << "1";
else
cout << "0";
}
cout << endl;
}
int main ()
{
char a = 1;
short b = 1;
int c = 1;
long d = 1;
__int64 e = 1;
unsigned __int64 f = 1;
printbinary3(a);
printbinary3(b);
printbinary3(c);
printbinary3(d);
printbinary3(e);
printbinary3(f);
return 0;
}
Вот вывод:
00000001
0000000000000001
00000000000000000000000000000001
00000000000000000000000000000001
0000000000000000000000000000000100000000000000000000000000000001
При компиляции я получаю эту ошибку для неподписанной переменной __int64 - f.
1> : warning C4334: '<<' : result of 32-bit shift implicitly converted to
64 bits (was 64-bit shift intended?)
1> xx.cpp(66) : see reference to function template instantiation
'void printbinary3<unsigned __int64>(T)' being compiled
Почему я не вижу
0000000000000000000000000000000000000000000000000000000000000001
как вывод для 64-битного целого числа?
Angus