Advertisement
KrimsN

bin with float

May 9th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /**
  4.  * Вывод двоичного представления чисел в разных типах переменных
  5.  * Используя побитовый сдвиг и побитовое умножение (битовые операции)
  6. **/
  7.  
  8. void printbit_int(int x)
  9. {
  10.     int i, ilen = sizeof(int) * 8, mask = 1 << (ilen - 1); // Настройка маски
  11.     char now;
  12.  
  13.     printf("int %d \t\t ->  ", x );
  14.     for (i = 1; i <= ilen; ++i)
  15.     {
  16.         if (x & mask)
  17.             now = '1';
  18.         else
  19.             now = '0';
  20.         putchar(now);
  21.         x <<= 1;
  22.         if (i % 8 == 0)
  23.             putchar(' '); // Разделение байтов
  24.     }
  25.     putchar('\n');
  26.     return;
  27. }
  28.  
  29. void printbit_sh_int(short int x)
  30. {
  31.     int i, ilen = sizeof(short int) * 8, mask = 1 << (ilen - 1); // Настройка маски
  32.     char now;
  33.  
  34.     printf("short int %d \t\t ->  ", x );
  35.     for (i = 1; i <= ilen; ++i)
  36.     {
  37.         if (x & mask)
  38.             now = '1';
  39.         else
  40.             now = '0';
  41.         putchar(now);
  42.         x <<= 1;
  43.         if (i % 8 == 0)
  44.             putchar(' '); // Разделение байтов
  45.     }
  46.     putchar('\n');
  47.     return;
  48. }
  49. void printbit_char(char x)
  50. {
  51.     int i, ilen = sizeof(char) * 8, mask = 1 << (ilen - 1); // Настройка маски
  52.     char now;
  53.  
  54.     printf("char %d \t\t ->  ", x );
  55.     for (i = 1; i <= ilen; ++i)
  56.     {
  57.         if (x & mask)
  58.             now = '1';
  59.         else
  60.             now = '0';
  61.         putchar(now);
  62.         x <<= 1;
  63.         if (i % 8 == 0)
  64.             putchar(' '); // Разделение байтов
  65.     }
  66.     putchar('\n');
  67.     return;
  68. }
  69.  
  70. void printbit_u_int(unsigned int x)
  71. {
  72.     int i, ilen = sizeof(unsigned int) * 8, mask = 1 << (ilen - 1); // Настройка маски
  73.     char now;
  74.  
  75.     printf("unsigned int %d \t ->  ", x );
  76.     for (i = 1; i <= ilen; ++i)
  77.     {
  78.         if (x & mask)
  79.             now = '1';
  80.         else
  81.             now = '0';
  82.         putchar(now);
  83.         x <<= 1;
  84.         if (i % 8 == 0)
  85.             putchar(' '); // Разделение байтов
  86.     }
  87.     putchar('\n');
  88.     return;
  89. }
  90.  
  91. void printbit_u_sh_int(unsigned short int x)
  92. {
  93.     int i, ilen = sizeof(unsigned short int) * 8, mask = 1 << (ilen - 1); // Настройка маски
  94.     char now;
  95.  
  96.     printf("unsigned short int %d \t ->  ", x );
  97.     for (i = 1; i <= ilen; ++i)
  98.     {
  99.         if (x & mask)
  100.             now = '1';
  101.         else
  102.             now = '0';
  103.         putchar(now);
  104.         x <<= 1;
  105.         if (i % 8 == 0)
  106.             putchar(' '); // Разделение байтов
  107.     }
  108.     putchar('\n');
  109.     return;
  110. }
  111. void printbit_u_char(unsigned char x)
  112. {
  113.     int i, ilen = sizeof(unsigned char) * 8, mask = 1 << (ilen - 1); // Настройка маски
  114.     char now;
  115.  
  116.     printf("unsigned char %d \t ->  ", x );
  117.     for (i = 1; i <= ilen; ++i)
  118.     {
  119.         if (x & mask)
  120.             now = '1';
  121.         else
  122.             now = '0';
  123.         putchar(now);
  124.         x <<= 1;
  125.         if (i % 8 == 0)
  126.             putchar(' '); // Разделение байтов
  127.     }
  128.     putchar('\n');
  129.     return;
  130. }
  131. void char_for_float(char x)
  132. {
  133.     int i, ilen = sizeof(char) * 8, mask = 1 << (ilen - 1); // Настройка маски
  134.     char now;
  135.  
  136.     for (i = 1; i <= ilen; ++i)
  137.     {
  138.         if (x & mask)
  139.             now = '1';
  140.         else
  141.             now = '0';
  142.         putchar(now);
  143.         x <<= 1;
  144.         if (i % 8 == 0)
  145.             putchar(' '); // Разделение байтов
  146.     }
  147.     return;
  148. }
  149.  
  150.  
  151. void printbit_double(double x)
  152. {
  153.     char * pc = (char*)&x + sizeof(x) - 1;
  154.      printf("double %lf \t\t ->  ", x );
  155.     for (int i = 0; i < sizeof(x); i++)
  156.     {
  157.         char_for_float(*pc);   
  158.         pc--;
  159.     }
  160.     printf("\n");
  161. }
  162. void printbit_float(float x)
  163. {
  164.     char * pc = (char*)&x + sizeof(x) - 1;
  165.      printf("float %f \t\t ->  ", x );
  166.     for (int i = 0; i < sizeof(x); i++)
  167.     {
  168.         char_for_float(*pc);   
  169.         pc--;
  170.     }
  171.     printf("\n");
  172. }
  173.  
  174.  
  175.  
  176.  
  177. int main(void) {
  178.  
  179.  
  180.     int i = 100;
  181.     printbit_int(i);
  182.     unsigned int ui = 100;
  183.     printbit_u_int(ui);
  184.     short int si = 100;
  185.     printbit_sh_int(si);
  186.     unsigned short int usi = 100;
  187.     printbit_u_sh_int(usi);
  188.     char c = 100;
  189.     printbit_char(c);
  190.     unsigned char uc = 100;
  191.     printbit_u_char(uc);
  192.     float f = -1.375;
  193.     printbit_float(f);
  194.     double d = 0.125;
  195.     printbit_double(d);
  196.     return 0;
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement