Преобразование знаковых и беззнаковых чисел в C#
Число типа int можно записать в uint.
Беззнаковый тип хранит только ноль и положительные
числа. Отрицательных значений у него нет.
Возьмем положительное 100 и запишем его
в беззнаковый тип. Число входит в диапазон
и остается собой:
int num1 = 100;
uint num2 = (uint) num1;
Console.WriteLine(num2); // prints 100
Теперь запишем отрицательное -1. Минус
в беззнаковую ячейку не кладется. Биты идут по кругу,
и на экране верхняя граница uint:
int num1 = -1;
uint num2 = (uint) num1;
Console.WriteLine(num2); // prints 4294967295
В одном действии C# ведет себя иначе, чем при
записи в uint. Сложим -2 и 1
типа uint. Отрицательное int
расширяется до long, счет обычный:
int num1 = -2;
uint num2 = 1;
Console.WriteLine(num1 + num2); // prints -1
Если перед сложением явно записать int
как uint, минус снова превращается
в огромное положительное. Плюс единица
дает верхнюю границу uint:
int num1 = -2;
uint num2 = 1;
Console.WriteLine((uint) num1 + num2); // prints 4294967295
Дана переменная:
int num = 40;
Запишите ее в uint и выведите новую
переменную.
Дана переменная:
int num = -1;
Запишите ее в uint и выведите новую
переменную.
Дан следующий код:
int num1 = -2;
uint num2 = 1;
Console.WriteLine(num1 + num2);
Скажите, что выйдет на экран.