Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <math.h>
- #include <limits.h>
- #define ON 1
- #define OFF 0
- #define DEBUG OFF
- #if DEBUG == ON
- #define debug(msg) printf ("%i\n", msg);
- #else
- #define debug(msg)
- #endif
- void main() {
- setlocale (LC_ALL, "Russian");
- size_t len = sizeof(int) * CHAR_BIT; //количество байтов * 8 бит
- unsigned i, j;
- int a[8];
- puts ("Введите 8 чисел через пробел:");
- 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]);
- puts ("Исходная последов. в десят. форме: ");
- for (i = 0; i < 8; i++){
- printf ("%i ", a[i]);
- }
- puts ("\n");
- puts ("Исходная последов. в восьмер. форме: ");
- for (i = 0; i < 8; i++){
- printf ("%o ", a[i]);
- }
- puts ("\n");
- // переменная check - единица и ряд нулей
- // используется для побитовой проверки числа слева направо при помощи побитового сдвига
- int check = (1 << (len-2)); //единица на 2 бите слева, т.к. первый бит определяет знак
- debug (check);
- for (j = 0; j < 8; j++){
- if ((a[j] & 1) == 1) { //если нечетный
- for (i = 0; i < len; i++){
- // перебираем двоичный код числа слева направо
- if ((a[j] & check) != 0) {//если очередной бит не равен 0
- debug (check);
- a[j] = a[j] - check; //превращаем его в 0
- break; // выходим из цикла
- }
- else{
- check = check >> 1; //если очередной бит равен 0, переходим к следующему
- }
- }
- }
- else {// если четный
- a[j] = a[j] | 3; //последние два бита заменяем на 1
- }
- }
- puts ("Преобраз. последов. в десят. форме: ");
- for (i = 0; i < 8; i++){
- printf ("%i ", a[i]);
- }
- puts ("\n");
- puts ("Преобраз. последов. в восьмер. форме: ");
- for (i = 0; i < 8; i++){
- printf ("%o ", a[i]);
- }
- puts ("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement