Что происходит, когда мы превышаем допустимый диапазон встроенных типов данных в C++?

Опубликовано: 15 Сентября, 2022

В этой статье мы рассмотрим, что происходит, когда мы превышаем допустимый диапазон встроенных типов данных в C++, на некоторых примерах.

Пример 1: Программа, показывающая, что происходит, когда мы пересекаем диапазон «char».

Здесь a объявлен как char. Здесь цикл работает от 0 до 225. Значит, он должен печатать от 0 до 225, а затем останавливаться. Но это создаст бесконечный цикл. Причина этого в том, что допустимый диапазон символьных данных составляет от -128 до 127. Когда «а» становится от 128 до а++, диапазон превышен, и в результате первое число с отрицательной стороны диапазона (т.е. -128) назначается а. В результате этого «а» никогда не достигнет точки 225, поэтому будет напечатан бесконечный ряд символов.

Этот код будет печатать «1» бесконечное время, потому что здесь «a» объявлено как «bool», и его допустимый диапазон — от 0 до 1. А для логической переменной все, кроме 0, равно 1 (или истине). Когда «а» пытается стать 2 (через а++), 1 присваивается «а». Условие a<=5 выполняется и управление остается в контуре.

Пример 2: Программа, показывающая, что происходит, когда мы пересекаем диапазон 'bool'

Будет ли этот код печатать «а», пока не станет 32770? Что ж, ответ — неопределенный цикл, потому что здесь «а» объявлено как короткое, и его допустимый диапазон — от -32768 до +32767. Когда 'a' пытается стать 32768 через a++, диапазон превышается, и в результате первое число с отрицательной стороны диапазона (т.е. -32768) присваивается a. Следовательно, условие «a < 32770» выполняется, и управление остается внутри контура.

Пример 3: Программа, показывающая, что происходит, когда мы пересекаем диапазон «коротких»

Обратите внимание, что short — это сокращение от short int. Они синонимы. Short, Short Int, Signed Short и Signed Short Int имеют один и тот же тип данных.

Пример 4: Программа, показывающая, что происходит, когда мы пересекаем диапазон «беззнакового короткого замыкания».

Будет ли этот код печатать «а», пока не станет 65536? Что ж, ответ — неопределенный цикл, потому что здесь «а» объявлено как короткое, и его допустимый диапазон — от 0 до +65535. Когда 'a' пытается стать 65536 через a++, диапазон превышен, и в результате первое число из диапазона (т.е. 0) присваивается a. Следовательно, условие «a < 65536» выполняется, и управление остается внутри контура.

Объяснение: Мы знаем, что компьютер использует дополнение до 2 для представления данных. Например, если у нас есть 1 байт (мы можем использовать char и использовать %d в качестве спецификатора формата, чтобы просмотреть его как десятичное), мы можем представить от -128 до 127. Если мы добавим 1 к 127, мы получим -128. Это потому, что 127 — это 01111111 в двоичном формате. И если мы добавим 1 к 01111111, мы получим 10000000. 10000000 равно -128 в форме дополнения до 2. То же самое произойдет, если мы будем использовать целые числа без знака. 255 — это 11111111, когда мы добавляем 1 к 11111111, мы получаем 100000000. Но мы используем только первые 8 бит, так что это 0. Следовательно, мы получаем 0 после добавления 1 к 255.

Эта статья написана Адитьей Ракеча и улучшена Сакши Тивари . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью, используя write.geeksforgeeks.org, или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.

C++ C