Это ошибка переполнения на стороне Arduino.
Целое число со знаком (int
) может принимать значения от -32768
до 32767
(так как оно составляет два байта, каждый бит 8
образует число байтов 16
в диапазоне от -2^15
до 2^15-1
). Поскольку 33498
больше этого верхнего предела, оно оборачивается отрицательным.
Чтобы использовать это, измените ваш массив целых чисел на тип данных, который поддерживает большие положительные числа, чем 32767
- например, uint_16
.
Если вам интересно, мы можем точно понять, почему отрицательное число было -32038
.
Это потому, что все целые числа со знаком представлены с помощью дополнения до двух .
И в этой системе 1000001011011010
(33498
) равно -32038
.
Чтобы сделать это преобразование, мы отрицаем его (чтобы получить его положительное представление), инвертируя все его биты и добавляя 1
:
1000001011011010 --> 0111110100100101 --> 0111110100100110 == 32038