TheChampion
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Да тут все гораздо проще: Код: #include <iostream> #include <climits> #include <cstdlib> void print(const unsigned char* data, std::size_t size) { for(int i = 0; i < size; ++i) { unsigned char mask = 1 << (CHAR_BIT - 1); while(mask) { std::cout << ((data[i] & mask) ? 1 : 0); mask >>= 1; } std::cout << " "; } } int main(int argc, char* argv[]) { int i = 65536; print(reinterpret_cast<unsigned char*>(&i), sizeof(i)); std::cout << std::endl; double pi = 3.1415926; print(reinterpret_cast<unsigned char*>(&pi), sizeof(pi)); std::cout << std::endl; char ch = '\n'; print(reinterpret_cast<unsigned char*>(&ch), sizeof(ch)); std::cout << std::endl; } | CHAR_BIT --- число битов в байте, определена в <climits>. typeof(mask) == unsigned char, поскольку сдвиг таки арифметический, то есть захватывает знаковый бит, коего у unsigned принципиально нет. :-) |