#битовые_операции #cpp
Как сделать, чтобы после ввода числа, программа вывела его битовый код? Прочитал про битовые операции, но все же реализовать саму программу не смог
Ответы
Ответ 1
int i, N; N = 1234; i = 65536; while (true) { if (N & i) // битовое И - в данном случае вернет 2^i - если i-ый бит 1 printf("1"); else printf("0"); if (i == 1) // мы рассмотрели младший бит - выходим из цикла break; i >>= 1; // битовый сдвиг, запись числа смещается на один бит } // аналогично делению на 2, но быстрее. Как вариант. Вариаций много, изучите битовые операции: wiki.Ответ 2
Странно, что std::bitset никто не вспомнил: #include#include #include int main() { int num = 32; std::cout << std::bitset (num) << "\n"; } 00000000000000000000000000100000 Ответ 3
typedef unsigned short ushort; ushort num = 34; for(int i = 15; i >= 0; --i) // short 16 бит (00000000 00000000) std::cout << ((num >> i) & 1) << " "; // проходимся по битам и выводим через пробел Для этого необходимо выучить побитовые операции, это совсем несложно - информации в интернете полным полноОтвет 4
http://ideone.com/IHMlWD #includetemplate char * tobinary(number x, char *buf) { number q; char *p=buf; if((number)~0<0) { *(p++) = '0' + (x<0); q = (number)1 << ((sizeof(number)<<3) - 2); } else q = (number)1 << ((sizeof(number)<<3) - 1); for(; q; q>>=1) *(p++) = x & q ? '1' : '0'; *p = 0; return buf; } #define POSVAL 7 #define NEGVAL -7 int main(void) { char temp[128]; #define TEST(type,val) do { type x=val; puts(tobinary(x, temp)); } while(0) TEST(char, POSVAL); TEST(unsigned char, POSVAL); TEST(signed char, POSVAL); TEST(unsigned short, POSVAL); TEST(signed short, POSVAL); TEST(unsigned, POSVAL); TEST(signed, POSVAL); TEST(unsigned long, POSVAL); TEST(signed long, POSVAL); TEST(unsigned long long, POSVAL); TEST(signed long long, POSVAL); TEST(char, NEGVAL); TEST(unsigned char, NEGVAL); TEST(signed char, NEGVAL); TEST(unsigned short, NEGVAL); TEST(signed short, NEGVAL); TEST(unsigned, NEGVAL); TEST(signed, NEGVAL); TEST(unsigned long, NEGVAL); TEST(signed long, NEGVAL); TEST(unsigned long long, NEGVAL); TEST(signed long long, NEGVAL); #undef TEST getchar(); return 0; } Ответ 5
Была как то задача, в которой необходимо было заполнить массив от 0 до а битами каждого числа. #includeusing namespace std; int main() { int a; cin >> a; int row = 1 << a, row1; int digit[row][a]; for(int i = 0; i < row; i++){ row1 = i; for(int j = 0; j < a; j++){ digit[i][j] = (row1 >> (a - j - 1)) & 1; } } for(int i = 0; i < row; i++){ for(int j = 0; j < a; j++){ cout << digit[i][j] << " "; } cout << endl; } return 0; }
Комментариев нет:
Отправить комментарий