- •Информационные преобразования числовых форматов
- •Позиционные системы счисления
- •Преобразования целых чисел в двоичной и десятичной системах счисления
- •Коды двоичных целых чисел
- •1. Знаковый прямой код целого числа.
- •2. Обратный код целого числа.
- •3. Дополнительный код целого числа.
- •Битовое отображение целого числа
- •Преобразования вещественных чисел в двоичной и десятичной системах счисления
- •Нормальная форма вещественного числа
- •Преобразование вещественного числа в целое число
- •Преобразование целого числа в вещественное число
- •Фиксированный вещественный формат
- •Символьные преобразования числовой информации
- •Список литературы
- •Оглавление
Битовое отображение целого числа
Ниже представлена программа 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 и выполнить следующую итерацию цикла. Тело цикла завершено. Функция готова.