1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
#include <iostream>
// positionne le premier bit du type T a 1
template < typename T >
inline T highbit(T& t)
{
return t = (((T)(-1)) >> 1) + 1;
}
// pour notre cas typename est un unsigned long
template < typename T >
std::ostream& bin(T& value, std::ostream &o)
{
// boucle partant du bit de poid fort
// et decalant progressivement vers le bit de poid faible.
// exemple sur un type a 4 bits
// iteration 1 : bit = 1000
// iteration 2 : bit = 0100
// iteration 3 : bit = 0010
// iteration 4 : bit = 0001
for ( T bit = highbit(bit); bit; bit >>= 1 ) {
// Utilisation de l'operateur ternaire
// equivalent à if (value & bit) { return '1';} else {return '0';}
o << ( ( value & bit ) ? '1' : '0' );
}
return o;
}
int main()
{
unsigned long long hb;
unsigned long value0 = 0;
unsigned int value1 = 1;
long long value2 = -72;
long value3 = -256;
unsigned int value4 = 8;
unsigned long value5 = 255;
unsigned long long value6 = 71256688;
std::cout << "highbit:" << std::endl;
highbit(hb);
std::cout << "hex: " << std::hex << hb << std::endl;
std::cout << "dec: " << std::dec << hb << std::endl;
std::cout << "oct: " << std::oct << hb << std::endl;
std::cout << "bin: ";
bin(hb, std::cout);
std::cout << std::endl;
std::cout << "value0:" << std::endl;
std::cout << "hex: " << std::hex << value0 << std::endl;
std::cout << "dec: " << std::dec << value0 << std::endl;
std::cout << "oct: " << std::oct << value0 << std::endl;
std::cout << "bin: ";
bin(value0, std::cout);
std::cout << std::endl;
std::cout << "value1:" << std::endl;
std::cout << "hex: " << std::hex << value1 << std::endl;
std::cout << "dec: " << std::dec << value1 << std::endl;
std::cout << "oct: " << std::oct << value1 << std::endl;
std::cout << "bin: ";
bin(value1, std::cout);
std::cout << std::endl;
std::cout << "value2:" << std::endl;
std::cout << "hex: " << std::hex << value2 << std::endl;
std::cout << "dec: " << std::dec << value2 << std::endl;
std::cout << "oct: " << std::oct << value2 << std::endl;
std::cout << "bin: ";
bin(value2, std::cout);
std::cout << std::endl;
std::cout << "value3:" << std::endl;
std::cout << "hex: " << std::hex << value3 << std::endl;
std::cout << "dec: " << std::dec << value3 << std::endl;
std::cout << "oct: " << std::oct << value3 << std::endl;
std::cout << "bin: ";
bin(value3, std::cout);
std::cout << std::endl;
std::cout << "value4:" << std::endl;
std::cout << "hex: " << std::hex << value4 << std::endl;
std::cout << "dec: " << std::dec << value4 << std::endl;
std::cout << "oct: " << std::oct << value4 << std::endl;
std::cout << "bin: ";
bin(value4, std::cout);
std::cout << std::endl;
std::cout << "value5:" << std::endl;
std::cout << "hex: " << std::hex << value5 << std::endl;
std::cout << "dec: " << std::dec << value5 << std::endl;
std::cout << "oct: " << std::oct << value5 << std::endl;
std::cout << "bin: ";
bin(value5, std::cout);
std::cout << std::endl;
std::cout << "value6:" << std::endl;
std::cout << "hex: " << std::hex << value6 << std::endl;
std::cout << "dec: " << std::dec << value6 << std::endl;
std::cout << "oct: " << std::oct << value6 << std::endl;
std::cout << "bin: ";
bin(value6, std::cout);
std::cout << std::endl;
system("pause");
return 0;
} |
Partager