Вывести 1 байтовое целое число без знака в двоичном коде - C (СИ)

Узнай цену своей работы

Формулировка задачи:

1. вывести 1 байтовое целое число без знака в 2-ом коде а) с использованием операции деления, б) с использованием двоичной маски - без деления 2. вывести 1 байтовое целое знаковое число в 2-ом коде (доп. коде, прямом коде, обратном коде) а) с использованием операции деления, б) с использованием двоичной маски-без деления 3. Вывести число 2-ом коде, так как оно хранится в памяти, для числа типа int. Без использования деления. Критерий - минимальное количество команд.

Решение задачи: «Вывести 1 байтовое целое число без знака в двоичном коде»

textual
Листинг программы
#include <stdio.h>
 
main()
{
unsigned char x1 = 145;
char x2 = -115;
short int x3 = 1145;
 
// 1)
printf("1)\na)\t");
for(unsigned char y = 128, y1 = x1; y; y1%=y, y=y>>1)
        printf("%d ", y1/y);      // a)
printf("\nb)\t");
for(unsigned char y = 128; y; y=y>>1)
        printf("%d ", (x1&y)?1:0 );     //b)
 
// 2) a)
printf("\n\n2)\na)\t");
for(unsigned char y = 128, y2 = x2; y; y2%=y, y=y>>1)
        printf("%d ", y2/y);
printf("\n  \t");
for(unsigned char y = 128, y2 = (x2<0)?(-x2):x2; y; y2%=y, y=y>>1)
        printf("%d ", (x2<0 && y==128)?1:y2/y);
printf("\n  \t");
for(unsigned char y = 128, y2 = (x2<0)?(-x2):x2; y; y2%=y, y=y>>1)
        printf("%d ", (x2<0 && y==128)?1:!(y2/y));
//  b)
printf("\n\nb)\t");
for(unsigned char y = 128; y; y=y>>1)
        printf("%d ", (x2&y)?1:0 );
printf("\n  \t");
for(unsigned char y = 128, y2 = (x2<0)?(-x2):x2; y; y=y>>1)
        printf("%d ", (x2<0 && y==128) ? 1 : ((y2&y)?1:0) );
printf("\n  \t");
for(unsigned char y = 128, y2 = (x2<0)?(-x2):x2; y; y=y>>1)
        printf("%d ", (x2<0 && y==128) ? 1 : !((y2&y)?1:0) );
 
// 3)
printf("\n\n3)\t");
for(unsigned short int y = 32768; y; y=y>>1)
        printf("%d ", (x3&y)?1:0 );
 
return 0;
}

Объяснение кода листинга программы

Представленный код выполняет следующие действия: 1) Выводит двоичный эквивалент байтовых значений переменных x1, x2 в формате без знака. Для этого используется два вложенных цикла. Первый цикл перебирает все биты от старшего (наиболее значимого) к младшему (наименее значимому) и проверяет, является ли бит единицей или нулём. Если бит равен единице, то он выводит 1, если бит равен нулю, то он выводит 0. Второй цикл аналогичен первому, но он проверяет, является ли бит единицей или нулём и выводит 1, если бит равен единице. 2) Выводит двоичный эквивалент байтовых значений переменных x2 в формате с знаком и без знака. Для этого используется три вложенных цикла. Первый и второй циклы аналогичны первым двум циклам из первого пункта. Третий цикл проверяет, является ли бит единицей или нулём и выводит 1, если бит равен единице. 3) Выводит двоичный эквивалент короткого целого значения переменной x3 в формате без знака. Для этого используется один вложенный цикл. Цикл перебирает все биты от старшего (наиболее значимого) к младшему (наименее значимому) и проверяет, является ли бит единицей или нулём. Если бит равен единице, то он выводит 1, если бит равен нулю, то он выводит 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.545 из 5
Похожие ответы