Byte вне диапазона

Всем привет. Есть вопрос.
Кусок кода:

    byte x , corr;  
    //x принимает значение от 40 до 100
    corr = 70 - x;
    x = x + corr;

Не пойму, как происходит вычисление. Если х <= 70, то все понятно. Например, х=60, тогда corr=10 и x становится равен 70. Но если x , к примеру изначально равен 80, тогда в serial выдается corr = 246, а x + corr = 70. В принципе, мне это и нужно, но вроде byte не может принимать отрицательных значений. Как же считает компилятор?

А где в вашем примере отрицательное значение? 246 ? :slight_smile:

Ну так 70 - 80 должно быть -10, а оно 246
И потом 80+246 должно быть 326, а оно 70

Ну так 0 минус 10 и будет 246.

а ниче что byte это один байт? откуда там появится 326?
типы данных и размерности подучите.

1 лайк

замените byte на int8_t и все “наладится” )

Вы же сами написали, что байт не может быть отрицательным.
Значения байта лежат в диапазоне от 0 до 255, верно?
А теперь представьте, что это не отрезок с двумя концами, а кольцо, в котором после 255 снова идет ноль.

Тогда (-10) - это число лежащее на 10 единиц левее нуля, то есть 256 - 10 = 246
А 80+246 - это чуть сложнее. Это 10 единиц от 246 до 256 (которое у нас ноль, помните?) и остается еще 70

2 лайка

Я знаю, что byte от 0 до 255. Но как в итоге получается 70?

Вот надо понять, что 9+1 это 0 :slight_smile:

И придёт понимание.

чет прям косяки таких вопросов пошли)

То есть, при достижении максимума, отсчет идет по второму кругу? Спасибо за ответ.

Ключевое слово круг.