Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информационные преобразования числовых форматов (96

..pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
242.9 Кб
Скачать

int p =

t - 127;

// математический порядок - 1

printf(

"\np = %d",

p );

// монитор

DWORD m = ( ( u.n << 8 ) | 0x80000000);//мантисса DWORD z = m >> ( 31 – p -r);//фиксированное число

BinaryInt( "z = ", z);//бинарный вид модуля числа z |= ( u.n & 0x80000000 ) >> ( 31 - ( size-1 ) ); BinaryInt( "z = ", z );// бинарный вид результата

return z;

// вернуть фиксированное число

}

 

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

 

void main ( void )

// образец результата

{ float f;

printf( "f = " ); scanf( "%f", &f );// ввод числа

BinaryFloat( "f = ", f ); // бинарный вид образца unsigned int x = FloatFixed( f, 12, 4 );

printf( "\nx = %x", x ); // шестнадцатеричный вид

BinaryInt( "x = ", x );// бинарный вид результата

getch();

// просмотр результата

}

 

Если после запуска программы C6 ввести число –6.25, то на мониторе появляется следующий результат:

f = –6.25

t = 00000000000000000000000010000001 p = 2

z = 00000000000000000000000001100100 z = 00000000000000000000010001100100 x = 864

x = 00000000000000000000010001100100

10. СИМВОЛЬНЫЕ ПРЕОБРАЗОВАНИЯ ЧИСЛОВОЙ ИНФОРМАЦИИ

Число, введенное с клавиатуры, преобразуется компьютером в последовательность символов, которые затем оказываются в символьном массиве. И наоборот, перед выводом числа на монитор функции, аналогичные, например, printf(), выполняют пре-

21

образования из внутренних форматов целого и вещественного представления числа в соответствующую последовательность символов. В этом разделе рассматриваются возможные варианты реализации таких преобразований.

Рассмотрим пример программы C7, в которой целое положительное число переводится из формата unsigned int в формат символьного массива. Каждый символ отображает один бит исходного числа. В программе применяется технологический прием рекурсивной функции IntChar(). Это удобный прием для теории программирования, однако в приложениях он не всегда находит применение, поскольку реализация рекурсивной функции сопровождается значительными временными затратами, связанными с размещениями очередного экземпляра вызова функции IntChar() в стеке параметров операционной системы. Задача функции IntChar() в некотором смысле совпадает с назначением ранее обсуждавшейся функции BinaryInt(), которая не является рекурсивной. Разница лишь в том, что в функции BinaryInt() получается результат на мониторе, в функции IntChar() – в массиве.

Программа С7:

//Program C7

//Символьный вид положительного целого числа

//Рекурсивная функция

#include <stdio.h>

 

// printf, scanf

#include <conio.h>

 

// getch

#include <string.h>

 

// strcat_s

void IntChar( unsigned int n, char* s

)

{ if( n > 1 ) IntChar( n >> 1, s );

// поиск

( n & 1 ) == 0

? strcat_s( s, 32,

"0" )

}

: strcat_s( s, 32, "1" );

 

 

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

void main( void )

{ unsigned int n; // для целого числа char s[32] = { '\0' };// пустой символьный массив printf( "n = " ); scanf( "%d", &n );// ввод числа

IntChar( n, s);//символьный массив двоичного кода

printf( "st = %s", s );

// монитор

getch();

// просмотр результата

}

22

Если при выполнении программы C7 ввести произвольное целое число, например 37, то на мониторе появляются следующие строки:

n = 37

s = 100101

Рассмотрим пример программы C8, в которой положительное десятичное целое число вводится с клавиатуры в массив и затем преобразуется в двоичное число типа unsigned int. Идея алгоритма состоит в том, что каждая цифра десятичного числа умножается на соответствующий позиционный коэффициент: 110 = 12 , 1010 = 10102 , 10010 = 11001002 и т. д. Эти коэффициенты

можно найти путем умножения предыдущего коэффициента на 10. Получающиеся значения полиномиально складываются (1).

Программа С8:

//Program C8

//Преобразование целого положительного десятичного

//числа из символьного вида в тип unsigned int

#include <stdio.h>

 

// printf

#include <conio.h>

 

// getch

unsigned int CharInt( char* s )

{ int i;

 

// индекс символа

for( i = 0; s[i] != '\0'; i++ ); // конец строки

int n = 0;

 

// для результата

int k = 1;

 

// позиционный множитель

for( --i; i >= 0; i--)//просмотр от младшей цифры

{ int z = s[i] - 48;

// цифра минус код '0'

n += k * z;

// позиционное накопление числа

k *= 10;

// множитель следующей позиции

}

 

// результат

return n;

 

}

 

 

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

void main( void )

{char s[32];// для символьного представления числа printf( "s = " ); scanf( "%s", s ); // ввод числа

23

printf( "s = %s", s ); // монитор unsigned int n = CharInt(s);//char - unsigned int

printf( "\nn = %d", n );

// монитор

getch();

// просмотр результата

}

Если при выполнении программы C8 ввести произвольное число, например. 37, то на мониторе появляются следующие строки:

s = 37 s = 37 n = 37

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

Коган С. Программирование на языке С: Пер. с англ. М.: Изд. дом «Вильямс», 2007. 496 с.

Прата С. Язык программирования С++: Лекции и упражнения: Пер. с англ. М.: Изд. дом «Вильямс», 2007. 1187 с.

24

 

ОГЛАВЛЕНИЕ

 

Введение...................................................................................................

3

1.

Позиционные системы счисления.....................................................

4

2.

Преобразования целых чисел в двоичной и десятичной системах

 

 

счисления............................................................................................

5

3.

Коды двоичных целых чисел..............................................................

7

4.

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

9

5.

Преобразования вещественных чисел в двоичной и десятичной

 

 

системах счисления............................................................................

10

6.

Нормальная форма вещественного числа........................................

11

7.

Преобразование вещественного числа в целое число .....................

14

8.

Преобразование целого числа в вещественное число .....................

16

9.

Фиксированный вещественный формат...........................................

17

10. Символьные преобразования числовой информации ...................

21

Список рекомендуемой литературы ......................................................

24

25

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]