Различия между 16- и 32-разрядными платформами
Одни платформы Tibbo 16-разрядные, другие - 32-разрядные. Это различие не сводится к строчке в спецификации изделия: оно влияет на то, как компиляторы Tibbo BASIC и C расширяют целые числа.
32-разрядные платформы
На 32-разрядных платформах всё просто. Все вычисления всегда 32-разрядные. Конечно, результат может быть усечён по размеру принимающей переменной, но внутри все вычисления выполняются в 32-разрядных регистрах.
16-разрядные платформы
На 16-разрядных платформах ситуация сложнее. По умолчанию все вычисления выполняются в 16-разрядных регистрах. На 8- и 16-разрядные вычисления это не влияет. Пример:
dim x,y,z as byte
x=150
y=200
z=(x+y)/10 'the result is 35 (correct), and that's within a single byte's range but intermediary calculations require 16-bit arithmetic
А вот пример вычислений, для которых нужна 32-разрядная арифметика:
unsigned int i,j,k;
i=50000;
j=60000;
k=(i+j)/10; //The result will be 4446, which is incorrect. 32-bit calculations won't be used automatically!
Что произошло? Для вычисления 50 000 + 60 000 результат нужно хранить в 32-разрядном регистре, а на 16-разрядных платформах компилятор по умолчанию использует 16-разрядные регистры.
Чтобы всё работало правильно, достаточно добавить хотя бы одну 32-разрядную переменную. Это подскажет компилятору, что вычисление нужно расширить до 32 бит:
unsigned int i,k;
unsigned long d;
i=50000;
d=60000;
k=(i+d)/10; //The result will be 11000. This is correct!