На этом шаге мы приведем несколько программ, использующих рассмотренные
выше типы.
Первая из программ будет следующей:
#include<iostream.h> main () { int z1=12,z2=-88,z3=32789; //Присваивание начальных значений переменным. cout<<"z1="<<z1<<endl; /* Вывод целочисленных */ cout<<"z2="<<z2<<endl; /* значений z1,z2,z3 */ cout<<"z3="<<z3<<endl; /* на экран. */ }
Результат выполнения программы:
z1=12 z2=-88 z3=-32747
Кроме того, имеются служебные слова, которые можно использовать с типом int:
Данные типов short int и int представляются в компьютере совершенно одинаково. Заметим, что служебное слово int может быть опущено, что обычно и делается.
Допустимое значение для этого типа - один символ. Символ записывается в
апострофах.
Например: 'x','2','?'.
В памяти компьютера символ занимает один байт. Фактически хранится не
символ, а
число - код символа (от 0 до 255). По умолчанию тип символьный
(char)
интерпретируется как значение без знака (unsigned).
Приведем пример программы:
#include<iostream.h> main () { char simvol1='x',simvol2='2',simvol3='?'; cout<<"simvol1= "<<simvol1<<endl; /* Вывод символов */ cout<<"simvol2= "<<simvol2<<endl; /* на экран. */ cout<<"simvol3= "<<simvol3<<endl; /* */ }
Результат выполнения программы:
simvol1= x simvol2= 2 simvol3= ?
В языке C++ разрешается использовать тип char как числовой, то есть производить операции с кодом символа:
#include<iostream.h> main () { char c1='1',c2='2',c3='3'; /* ----------------------- */ cout<<"Код символа "<<c1<<" равен "<<(int)c1<<endl; cout<<"Код символа "<<c2<<" равен "<<(int)c2<<endl; cout<<"Код символа "<<c3<<" равен "<<(int)c3<<endl; cout<<"Сумма кодов = "<<(int)c1+(int)c2+(int)c3<<endl; }
Результат выполнения программы:
Код символа 1 равен 49 Код символа 2 равен 50 Код символа 3 равен 51 Сумма кодов = 150
Напомним, что конструкция (int) "заставляет" компьютер интерпретировать значения переменных c1, c2, c3 как целые числа.
Приведем еще один пример программы:
#include<iostream.h> #include<stdio.h> int integer=5; char character='5'; void main () { int sx=-8; cout<<"character="<<(int)character<<endl; /* 1 */ cout<<"integer="<<integer<<endl; /* 2 */ cout<<"character="<<character<<endl; /* 3 */ cout<<"integer=53="<<(char)(integer=53)<<endl; /* 4 */ cout<<"('5'>5)="<<('5'>5)<<endl; /* 5 */ cout<<"-----------------------"<<endl; cout<<"sx="<<oct<<sx<<endl; /* 6 */ cout<<"-----------------------"<<endl; cout<<"sx="<<oct<<(unsigned)sx<<endl; /* 7 */ cout<<"sx>>3="<<oct<<((unsigned)sx>>3)<<endl; /* 8 */ cout<<"-----------------------"<<endl; cout<<"sx>>3="<<oct<<(sx>>3)<<endl; /* 9 */ cout<<"sx>>3="<<dec<<(sx>>3)<<endl; /* 10 */ cout<<"-----------------------"<<endl; printf ("sx=%o\n",sx); /* 11 */ printf ("sx>>3=%o\n",sx>>3); /* 12 */ printf ("sx>>3=%d\n",sx>>3); /* 13 */ return; }
Результат выполнения программы:
character=53 integer=5 character=5 integer=53=5 ('5'>5)=1 ----------------------- sx=37777777770 ----------------------- sx=177770 sx>>3=17777 ----------------------- sx=37777777777 sx>>3=-1 ----------------------- sx=177770 sx>>3=177777 sx>>3=-1
Прокомментируем полученные результаты. В программе описываются три переменные: integer, character, sx, причем первые две из них описаны вне функции main. Это означает, что указанные переменные будут "видны" во всех функциях этого файла. Область видимости переменной sx ограничена рамками функции main. Теперь прокомментируем пронумерованные строки.
1. cout<<"character="<<(int)character<<endl; - отправляет в поток
вывода код символа '5'.
2. cout<<"integer="<<integer<<endl; - целое число 5 печатается в
десятичном виде.
3. cout<<"character="<<character<<endl; - отправляет в поток
вывода символ '5'.
4. cout<<"integer=53="<<(char)(integer=53)<<endl; - переменной
integer присваивается значение 53 (это код символа '5'), после чего
выводится
символ, который имеет код 53.
5. cout<<"('5'>5)="<<('5'>5)<<endl; - будет напечатана 1 (истина),так
как '5' имеет большее значение
(53), чем целое 5.
6. cout<<"sx="<<oct<<sx<<endl; - передача в поток вывода
значения переменной sx в восьмеричной системе счисления oct.
Не совсем понятно,
почему в этом случае для представления числа используется 4 байта
(переведите результат
из восьмеричной системы счисления в двоичную и посчитайте количество байт),
ведь для представления
целого числа в памяти компьютера отводится 2 байта (это можно проверить с
помощью функции
sizeof). Возможно, это связано с использованием потоков ввода/вывода
или из-за учета знака (для положительных
значений такого эффекта не наблюдается). (???)
7.cout<<"sx="<<oct<<(unsigned)sx<<endl; - вывод значения
переменной как восьмеричного
беззнакового числа.
8. cout<<"sx>>3="<<oct<<((unsigned)sx>>3)<<endl; - в некоторых
диалектах
языка C++ сдвиг целого со знаком приводит к тому, что знаковый разряд
копируется в свободные старшие разря-
ды слова, т.е. знак сохраняется. Однако, внимание, - это свойство зависит от
транслятора.
9.cout<<"sx>>3="<<oct<<(sx>>3)<<endl; - для представления
значения также
используется 4 байта, в отличие от вывода предыдущего результата.
10.cout<<"sx>>3="<<dec<<(sx>>3)<<endl; - сдвиг на 3 разряда
вправо целого
со знаком числа -8 дает желаемый результат -1 при условии, что знак
сохраняется,
и 8191 в противном случае (на шестнадцатиразрядном компьютере с
дополнительным кодом.)
11-13. Здесь повторен вывод значения переменной sx, но с
использованием другой
функции printf.
Мы привели примеры программ, в которых используются различные типы.
На следующем шаге мы познакомимся с функцией printf.