Приведение знаковых и беззнаковых типов в си

У меня есть вот такое выражение.

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.

Это совпало.

→ Ссылка