Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csPmNcNr 65 of 436 menu
◀ ▶

Сужение типа в C#

Сужение - это запись числа в тип, куда оно может не поместиться. Если число в тип входит, оно остается собой. Если не входит, лишние биты не сохраняются, и на экране уже другое число.

У short верхний край равен 32767, нижний равен -32768. Отдельного числа 32768 в этом типе нет. Шаг за верхним краем попадает на нижний, как у круга битов.

Сложение short компилятор считает в более широком int. Там 32768 помещается. Порча случается, когда результат кладут обратно в short. Перед записью его явно преобразуют через приведение в скобках.

Возьмем верхний край short, прибавим единицу в int и запишем сумму обратно:

short num1 = 32767; int num2 = num1 + 1; num1 = (short) num2; Console.WriteLine(num2); // prints 32768 Console.WriteLine(num1); // prints -32768

В num2 еще лежит правильное 32768. В num1 после записи уже -32768.

С нижнего края шаг такой же. Отнимем единицу от -32768 и запишем результат обратно в short:

short num = -32768; num = (short) (num - 1); Console.WriteLine(num); // prints 32767

Число, которое в тип входит, при записи не меняется. Положим 20 из int в short:

int num1 = 20; short num2 = (short) num1; Console.WriteLine(num2); // prints 20

Широкое long в int тоже может не войти. Возьмем число больше двух миллиардов и запишем его в int. Точное значение после сужения заранее не угадывают. На экране будет уже не оно:

long num1 = 9000000000000L; int num2 = (int) num1; Console.WriteLine(num2); // prints 2043514880

Дана переменная:

short num = 32766;

Прибавьте 1, запишите результат в эту же переменную через приведение к short и выведите ее.

Дана переменная:

short num = 32767;

Прибавьте 1, запишите результат в эту же переменную через приведение к short и выведите ее.

Дана переменная:

short num = -32768;

Отнимите 1, запишите результат в эту же переменную через приведение к short и выведите ее.

Дана переменная:

int num = 100;

Запишите ее в переменную short и выведите новую переменную.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить