+ 1

Объясните почему?

#include <iostream> using namespace std; int main() { char a = 0xF0; cout << hex << (int)a; return 0; } Ожидаю получить f0 или 000000f0, а получаю fffffff0. В чем подвох?

16th Nov 2017, 3:27 PM
Юрий Исаев
Юрий Исаев - avatar
2 ответов
+ 2
Старший бит - знаковый. Если он равен 1, то значение int считается отрицательным. А отрицательное значение размещается в памяти в дополнительном коде - таком, что все старшие биты равны 1. И при преобразовании из символа в int знаковый разряд распространяется на все старшие биты полученного четырёхбайтового значения.
16th Nov 2017, 11:11 PM
Вадим Сухотин (Vadim Sukhotin)
Вадим Сухотин (Vadim Sukhotin) - avatar
0
Спасибо! Задача решена)
18th Nov 2017, 8:51 AM
Юрий Исаев
Юрий Исаев - avatar