Модифицированный дополнительный код.

В модифицированном дополнительном коде так же, как и в обратном, под знак числа отводится два разряда. В модифицированном дополнительном коде числа представляются по правилу:

x > 0, x = +0, x1, x2, …, то [x]доп. мод. = 00, x1, x2, …

х < 0, х = -0, х1, х2, …, то [x]доп. мод. = 11, |x1, |x2, … + 0,0…1

Как и в обратном коде, комбинация знаковых разрядов (01 и 10) являются признаком переполнения разрядной сетки.

04.05.2012 г. (пт)

Таблица «Способы преобразования символов при вводе».

Символ за % Тип, ожидаемый при вводе Тип аргумента
d Десятичное целое Указатель на int
D Десятичное целое Указатель на long int
o Восьмеричное целое Указатель на int
O Восьмеричное целое Указатель на long int
x, X Шестнадцатеричное целое Указатель на int
i Десятичное, восьмеричное или шестнадцатеричное целое Указатель на int
I Десятичное, восьмеричное или шестнадцатеричное целое Указатель на long int
u Десятичное целое без знака Указатель на unsigned int
U Десятичное целое без знака Указатель на unsigned long int
e, E, f, g, G Величина с плавающей точкой, состоящая из мантиссы и порядка Указатель на float
c Символ. Символы пробелов (и подобные), которые обычно пропускаются, но считываются, если есть символ с Указатель на char
s Символьная строка Указатель на символьный массив, достаточно большой, чтобы разместить вводимое поле и завершающий null-символ, добавляемый автоматически
% Символ % Не преобразуется, участвует во вводе, как символ %
n Из потока ничего не считывается Указатель на переменную типа int, в которую записывается количество символов, считанных из потока, вплоть до этой точки при текущем вызове функции
p Величина в виде XXXX:YYYY, где X и Y являются шестнадцатеричными цифрами верхнего регистра Указатель на объект (far* или near*) %p выполняет преобразование требуемого указателя, используя модели памяти

Из рассмотренного выше программного примера следует, что в общем случае структура формата имеет вид:

%[*][ширина][префикс]тип

[*] после % подавляет запоминание следующего вводимого поля. Поле считывается в соответствии с форматом, но преобразованная величина никуда не записывается.

[ширина] – это положительное десятичное целое, задающее максимальное число символов при вводе. Если [ширина] избыточная, то чтение происходит до пробельного символа. Если [ширина] меньше, чем число символов до пробельного, то читаются и преобразуются только символы, числом не более [ширина].

При этом, [префиксами] могут быть:

N – используется для печати адресов. near (формат %Np)

F – используется для печати адресов. far (формат %Fp)

H – используется для ввода коротких целых с типом short.

L – используется для ввода длинных целых и вещественных с типом long.

Отметим, что scanf и fscanf идентичны, но вместо потока, заданного первым аргументом, она по умолчанию использует предопределенный входной поток stdin, поэтому в вызове функции scanf список аргументов начинается сразу с управляющей строки.

Вывод с использованием функции printf и fprintf

Рассмотрим пример, который можно выполнять на компьютере.

/*

Пример программы

Вывод на языке C++

Указать вид строк печати в файле f1.out на магнитном диске после выполнения приведенной ниже программы

*/

#include<stdio.h> //для функции ввода-вывода

int main (void) //возвращает 0 при успехе

{

//данные для печати

float f=1.5e2;

long double

ld=2.0e-3L;

int i=7;

long int li=12l;

short int si=5;

FILE *f_out; //указатель на структуру со сведениями о файле для

//вывода

int retcode; //возвращаемое значение для fclose

//Открываем файл f1.out

f_out=fopen(“f1.out”,”w”);

if(f_out==NULL)

{

printf(“\n Файл не открыт”);

return 1;

}

//записываем в файл f1.out

fprintf(f_out,“% 3OS\n f=%f %5S i=%10d\n”,

“*”, f, “ “, i);

fprintf(f_out, “ld=%-Lf f=%15f f=%15.2f f=%+15.2f\n”,

ld, f, f, f);

fprintf(f_out, “i=%10.5d f=%E li=%ld si=%hi\n”,

i, f, li, si);

//закрываем файл

retcode=fclose(f_out);

if(retcode==EOF)

{

printf(“\n Файл не закрыт”);

return 2;

}

return 0

}

//конец примера программы

Наши рекомендации