Приведение знаковых и беззнаковых типов в си
У меня есть вот такое выражение.
uint8_t a = 0 - (0x10+0x38+0x00+0x00+0x5C+0xC0+0x00+0x00+0x8F+0xC0+0x00+0x00+0x73+0xC0+0x00+0x00+0x71+0xC0+0x00+0x00);
Мне требуется посчитать контрольную сумму для intlHEX и оно взято из примера.
Результатом данного выражения является 249. Каким образом тут получается 249, по какому правилу отрицательное число приводится к беззнаковом ? Результат сложения всех чисел в скобке 1303, если убрать вычитание из нуля будет 23.
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Значение берется по модулю 256 (или, в общем случае, 2n).
Грубо говоря, к числу прибавляется или вычитается 256 до тех пор, пока оно не окажется в диапазоне 0..255.
Результатом данного выражения является 249
Запустил у себя, получил 233. На калькуляторе тоже выходит 233.
если убрать вычитание из нуля будет 23.
Это совпало.