Различия между 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!
Исходный материал Tibbo обновлён 12 июля 2022Оригинал на docs.tibbo.com · Сообщить об ошибке