Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информационные преобразования числовых форматов....doc
Скачиваний:
3
Добавлен:
13.11.2018
Размер:
333.31 Кб
Скачать

Битовое отображение целого числа

Ниже представлена программа C1, в которой два целых числа и выводятся на монитор в двоичном виде. Дополнительный код числа вычисляется как .Можно непосредственно убедиться, что число хранится в компьютере в дополнительном коде . Кроме то подтвердим, что и что . Поскольку двоичные отображения на мониторе производятся несколько раз в различных ситуациях, то необходимые инструкции собраны в одну функции BinaryInt( ).

// Program C1

// Битовое изображение целого числа

// Дополнительный код числа

#include <stdio.h> // printf

#include <conio.h> // getch

void BinaryInt( char* text, int n )

{ printf( "\n%s", text ); // название числа

unsigned int b = 0x80000000; // 1 в бите 31

while( b > 0 ) // заголовок инструкции цикла

{ ( n & b ) == 0 ? printf( "0" ) : printf( "1" );

b >>= 1; // сдвиг вправо на 1 бит

}

}

//---------------------------------------------------

void main( void )

{ int m = 6, d = -6;

printf( "m = %d", m ); // монитор

BinaryInt( "m = ", m );// битовое изображение m

int k = ~m + 1; // дополнительный код

BinaryInt( "~m+1= ", k );// битовое изображение k

printf( "\nd = %d", d ); // монитор

BinaryInt( "d = ", d );// битовое изображение d

BinaryInt( "~d+1= ", ~d+1 );// дополнительный код

BinaryInt( "m+k = ", m + k ); // m + k

getch(); // просмотр результата

}

После выполнения программы C1 следующие строки находятся на мониторе.

m = 6

m = 00000000000000000000000000000110

~m+1= 11111111111111111111111111111010

d = -6

d = 11111111111111111111111111111010

~d+1= 00000000000000000000000000000110

m+k = 00000000000000000000000000000000

Функция BinaryInt( ) предназначена для вывода на монитор битового изображения целого числа. Конструкция объявления параметров содержит указатель на текст пояснения char* text и четырехбайтовое число int n. В теле функции поясняющий текст выводится с начала новой строки printf( "\n%s", text ). Переменная unsigned int b = 0x80000000 занимает 4 байта в 32 бита. Шестнадцатеричные цифры 0x80000000 задают расположение 1 в 31-м бите, поскольку изображение числа начинается со старшей двоичной цифры.

Вывод числа осуществляется под управлением заголовка цикла while( b > 0 ), который контролирует, чтобы в переменной b обязательно находилась 1 в каком-нибудь бите. В теле цикла выполняется условное выражение ( n & b ) == 0 ? printf( "0" ) : printf( "1" ). Если конъюнкция n & b истинна, то в соответствующем бите b числа n находится 0. Переменная b является маской для определения информации в соответствующем бите числа n. Если конъюнкция ( n & b ) == 0 истинна, то 0 отображается на мониторе printf( "0" ). В противном случае в бите числа n находится 1, которая также отображается на мониторе printf( "1" ). Очередной бит числа n обработан. 1 в переменной b можно сдвинуть на 1 бит вправо b >>= 1 и выполнить следующую итерацию цикла. Тело цикла завершено. Функция готова.