Целочисленное переполнение int и char - PullRequest
0 голосов
/ 12 мая 2018

У меня есть два примера:

unsigned long l = ULONG_MAX; 
char c = -1; 
if (c == l)
    std::cout << "-1 = 4,294,967,295?";

вывод: "- 1 = 4 294 967 295?"

unsigned char l = 255; 
char c = -1; 
if (c == l)
    std::cout << "-1 = 4,294,967,295?"; 

Выход:

Почему первый пример генерирует вывод, а второй нет?

1 Ответ

0 голосов
/ 18 мая 2018

C компилятор преобразует примеры: В первом случае: if ((unsigned long)c == l)

Во втором случае if ((int)c == (int)l)

...