Шаг 6.
Использование простейших типов

    На этом шаге мы приведем несколько программ, использующих рассмотренные выше типы.

    Первая из программ будет следующей:

#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 от -32768 до 32767. Число 32789 не входит в этот диапазон - превышает максимальное значение на 22. Мы получили на экране число -32747. Почему?
Ответ и комментарии вы можете посмотреть здесь.

    Кроме того, имеются служебные слова, которые можно использовать с типом int:

    Данные типов short int и int представляются в компьютере совершенно одинаково. Заметим, что служебное слово int может быть опущено, что обычно и делается.

   


    char - символьный. Возможные модификации:

    Допустимое значение для этого типа - один символ. Символ записывается в апострофах. Например: '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.


Предыдущий шаг Содержание Следующий шаг