
У меня есть пару вопросов:
1) Если ранг y signed int и unsigned int одинаковый, то исходное выражение конвертируется в unsigned?
В кодблокс я написал такой код:
#include
int main(void)
{
int i = -100;
unsigned int u = 190U;
int a = u + i;
printf("%lld\n", a);
return 0;
}
output: 27583791803400282
Какая тут логика? То есть i приводится к типу unsigned int и эта единичка в самом начале остается и получается этот миллиард складывается с 190U и все заносится в a?2) Почему если переменная 'a' будет типа 'long long', то есть:
#include
int main(void)
{
int i = -100;
unsigned int u = 190U;
long long a = u + i;
printf("%lld\n", a);
return 0;
}
output: 90
Почему тут вывод правильный ( с точки зрения матана)? Типо ну да size long long 8 байт, ну и что?..3) И ещё вопрос, я тут "поигрался" со значениями 'unsigned int u' и если u сделать "меньше", чем 'int i', то есть:
#include
int main(void)
{
int i = -100;
unsigned int u = 90U;
long long a = u + i;
printf("%lld\n", a);
return 0;
}
ну по идее abs(-100) > abs(90)то вывод будет такой:
4294967286
Какая тут логика у всех трех вариантах? Я чет не втыкаю, посмотрел в книжке, потом видос Тимофея Хирьянова и ещё пару видео чет не улавливаю суть.