После того, как мне посоветовали прочитать "C++ Primer 5 ed" Стэнли Б. Липмана ", я не понимаю этого:
Страница 66. "Выражения, включающие неподписанные типы"
unsigned u = 10;
int i = -42;
std::cout << i + i << std::endl; // prints -84
std::cout << u + i << std::endl; // if 32-bit ints, prints 4294967264
Он сказал:
Во втором выражении значение int -42 преобразуется в unsigned до того, как добавление выполнено. Преобразование отрицательного числа в неподписанное ведет себя точно так же, как если бы мы пытались присвоить это отрицательное значение неподписанному объекту. Значение "оборачивается", как описано выше.
Но если я сделаю что-то вроде этого:
unsigned u = 42;
int i = -10;
std::cout << u + i << std::endl; // Why the result is 32?
Как видите, -10
не конвертируется в unsigned int
. Значит ли это сравнение происходит до продвижения signed integer
на unsigned integer
?