#include <iostream> using namespace std; class bits{ unsigned int _val; public: static bool formatted; bits(unsigned int val){ _val = val; } const char* displayBin() const{ unsigned int m = 1 << sizeof(_val)*8-1; char* str = (formatted)?new char[sizeof(_val)*8 + (sizeof(_val)*8)/4 - 1 + 1]:new char[sizeof(_val)*8 + 1]; int i = 0; while(m){ if (formatted && (i+1)%5 == 0){ str[i] = ' '; } else { str[i] = (_val & m)? '1' : '0'; m = m >> 1; } i++; } str[i] = 0; return str; } }; ostream& operator<<(ostream& os, const bits& b){ os<<b.displayBin(); return os; } bool bits::formatted = false; // by default false int main(){ char A = 0x5c; char B = 0x95; char C = 0; cout<<bits(A)<<endl; bits::formatted = true; cout<<bits(B)<<endl; return 0; }
I should note that when setting statics in C++ using the class name, the scope resolution operator(::)needs to be used. Also, the default value of the static variable must be set outside the class.
No comments:
Post a Comment