Найти в Дзене
Junior Coder

Числовые переменные в С++

Переменные в С++ делятся на строковые и числовые. Числовые переменные могут быть знаковыми - 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

Наука
7 млн интересуются