Модифицированный дополнительный код.
В модифицированном дополнительном коде так же, как и в обратном, под знак числа отводится два разряда. В модифицированном дополнительном коде числа представляются по правилу:
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
}
//конец примера программы