Переменные в С++ делятся на строковые и числовые. Числовые переменные могут быть знаковыми - signet, и беззнаковыми - unsigned. К числовым относятся:
unsignet short int - ее диапозон: 0 - 65535;
short int: -32768 - 32767;
unsignet long int: 0 - 4 294 967 295;
long int: -2 147 483 648 - 2 247 483 647;
Любители астрономии могут воспользоваться объявлением long long.
Переменные типа int могут быть 16-ти разрядными и 32-х разрядными:
unsignet int(16): 0 - 65535; 2 байта
unsignet int(32): 0 - 4 294 967 295; 4 байта
размер любой переменной, в байтах, можно узнать набрав:
cout << sizeof(int); // или long, char и т.д.
так же есть переменные с плавающей точкой:
float(32);
double(64);
Размеры переменных могут отличаться от приведеных, поэтому лучше проверить их на своей машине приведенным выше способом.
Отрицательные переменные отличаются от положительных как бы зеркальным расположением в бинарном виде, то есть если:
дес. шест. бинарный
0 = 0x00 = 0b00000000
1 = 0x01 = 0b00000001
2 = 0x02 = 0b00000010
то отрицательные:
-1 = 0xff = 0b11111111
-2 = 0xfe = 0b11111110 и т.д.
0 - это положительное число, в отрицательных числах старший бит (самый левый) всегда равен 1. При переполнении во время сложения положительных и отрицательных чисел верхняя часть битов, которая не помещается в отведенных регистрах, отбрасыватся, и мы получаем правильный результат, например:
0b00000001 это 1
+
0b11111111 это -1
=
0b00000000
или
0b11100000 это -32
+
0b00111010 это 58
=
0b00011010 это 26
напоминаю: побитовые операции выполняются справа налево, при "встрече" двух единиц они обнуляются, а единица переносится на одну позицию влево.
(Надеюсь, что все понятно объясняю. Напишите в комментариях.)
В С++ есть два очень полезных оператора: это оператор инкремента ++, он увеличивает переменную на единицу, и оператор декремента --, он уменьшает переменную на единицу. Например выражение:
i = i + 1;
можно написать еще так:
i += 1;
или так:
i++;
В зависимости от того, где стоит оператор перед переменной или после нее в циклах, операция инкримента (или декремента) будет выполняться до начала первого цикла, или после него, например:
for(int i = 0; i < 10; ++i)
cout << i << ", ";
результат будет:
1, 2, 3, 4, 5, 6, 7, 8, 9,
если ++ поставить после i:
for(int i = 0; i < 10; i++)
cout << i << ", ";
результат будет:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
в цикле while переменную нужно объявлять до начала цикла:
int i = 0;
while(i < 10)
{
cout << i << ", ";
i++;
}
в переменных объявленных как unsigned по достижении максимального числа и продолжении операции инкримента, переменная обнуляется и затем снова начинает увеличиваться (как в спидометре автомобиля):
unsigned short int x = 65535;
x++;
x == 0;
x++;
x == 1; и т.д.
В больших программах зачастую приходится использовать много переменных и чтобы постоянно не набирать конструкции типа unsignet short int можно воспользоваться псевдонимом typedef и объявив один раз typedef unsignet short int можно подставлять его в любом месте программы:
typedef unsignet short int uShort;
uShort myVar;
Объявляются переменные знаком присвоения = , не путайте его со знаком равенства ==, то есть записав:
int i = 5;
мы присвоили переменной i значение 5. Значение всегда присваивается справа налево поэтому запись int 5 = i; будет ошибкой, будьте внимательны.
В С++ можно выполнять пять арифметических операций, это:
* - умножение
/ - деление
+ - сложение
- - вычитание
% - деление по модулю
Деление по модулю бывает полезным когда из большего числа нужно получить меньшее по заданному основанию, например если написать:
cout << 565 % 13;
то деление на тринадцать будет производиться столько раз, пока мы не получим меньшее чем тринадцать число, то есть 6.
И небольшая программа для вывода случайных чисел.
(знак решетки)include <iostream>
(знак решетки)include <time.h>
(знак решетки)include <windows.h>
using namespace std;
int main()
{
SYSTEMTIME systm;
int x, tm;
srand((unsigned)time(NULL));
for(int i = 0; i < 10; i++)
{
GetSystemTime(&systm);
tm = systm.wMilliseconds;
x = (rand() + tm) % 20;
cout << x << endl;
}
return 0;
}
Для большей вероятности получения случайного числа, мы значение полученное с помощью функции rand(), прибавляем к текущему системному времени полученному в миллисекундах, затем получаем остаток из основания 20.
Глобальные, строковые переменные, а так же константы я опишу в следующей статье.
Всего доброго!..
#C++ #int #short #long