Advertisement
kiraventom

Untitled

Dec 11th, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <math.h>
  5. #include <limits.h>
  6.  
  7. #define ON 1
  8. #define OFF 0
  9.  
  10. #define DEBUG OFF
  11.  
  12. #if DEBUG == ON
  13.     #define debug(msg) printf ("%i\n", msg);
  14. #else
  15.     #define debug(msg)
  16. #endif
  17.  
  18. void main() {
  19.     setlocale (LC_ALL, "Russian");
  20.  
  21.     size_t len = sizeof(int) * CHAR_BIT; //количество байтов * 8 бит
  22.     unsigned i, j;
  23.     int a[8];
  24.  
  25.     puts ("Введите 8 чисел через пробел:");
  26.     scanf ("%i %i %i %i %i %i %i %i", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8]);
  27.  
  28.     puts ("Исходная последов. в десят. форме: ");
  29.     for (i = 0; i < 8; i++){
  30.         printf ("%i ", a[i]);
  31.     }
  32.     puts ("\n");
  33.     puts ("Исходная последов. в восьмер. форме: ");
  34.     for (i = 0; i < 8; i++){
  35.         printf ("%o ", a[i]);
  36.     }
  37.     puts ("\n");
  38.     // переменная check - единица и ряд нулей
  39.     // используется для побитовой проверки числа слева направо при помощи побитового сдвига
  40.     int check = (1 << (len-2)); //единица на 2 бите слева, т.к. первый бит определяет знак
  41.     debug (check);
  42.  
  43.     for (j = 0; j < 8; j++){
  44.         if ((a[j] & 1) == 1) { //если нечетный
  45.             for (i = 0; i < len; i++){
  46.                 // перебираем двоичный код числа слева направо
  47.                 if ((a[j] & check) != 0) {//если очередной бит не равен 0
  48.                     debug (check);
  49.                     a[j] = a[j] - check; //превращаем его в 0
  50.                     break; // выходим из цикла
  51.                 }
  52.                 else{
  53.                     check = check >> 1; //если очередной бит равен 0, переходим к следующему
  54.                 }
  55.             }
  56.         }
  57.         else {// если четный
  58.             a[j] = a[j] | 3; //последние два бита заменяем на 1
  59.         }
  60.     }
  61.  
  62.     puts ("Преобраз. последов. в десят. форме: ");
  63.     for (i = 0; i < 8; i++){
  64.         printf ("%i ", a[i]);
  65.     }
  66.     puts ("\n");
  67.     puts ("Преобраз. последов. в восьмер. форме: ");
  68.     for (i = 0; i < 8; i++){
  69.         printf ("%o ", a[i]);
  70.     }
  71.     puts ("\n");
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement