Сборка из сообщений сайта и Справки Bascom.

'====================================
‘ Формирование переменных с большей разрядностью
' ---------------------------------------------------------------
' Два байта в одну переменную WORD или INTEGER
' ---------------------------------------------------------------
'BYTE - 8 bit переменная
'WORD - 16 bit переменная
'INTEGER - 16 bit переменная

' ---------------------------------------------------------------
‘ Формирование переменной типа  WORD или INTEGER
'var = MAKEINT(LSB , MSB)
' LSB   - младший байт
' MSB - старший байт
' арифметика формирования - v = (256 * MSB) + LSB

‘ Получаем WORD
Dim a_Low As Byte
Dim a_High As Byte
Dim a As Word
a_Low = &B0000_0000    ' младший байт
a_High = &B1000_0000    ' старший байт
a = Makeint(a_Low, a_High)
'В переменной a - &B1000_0000_0000_0000
'                                 десятичное число 32768

‘ Получаем INTEGER
Dim a_Low As Byte
Dim a_High As Byte
Dim a As Integer
a_Low = &B0000_0000    ' младший байт
a_High = &B1000_0000    ' старший байт
a = Makeint(a_Low, a_High)
'В переменной a - &B1000_0000_0000_0000
'                                 десятичное число -32768 (!)
‘                                 старший бит переменной этого типа отвечает за знак числа

' ---------------------------------------------------------------
Dim a As Word
Dim a0 As Byte At a + 0 Overlay ' "+0" здесь и далее можно не вписывать
Dim a1 As Byte At a + 1 Overlay
a0 = &B0000_0000    ' младший байт
a1 = &B1000_0000    ' старший байт
'В переменной a - &B1000_0000_0000_0000
'                                 десятичное число 32768

' ---------------------------------------------------------------
' Две двухбайтных в одну четырехбайтную переменную
' ---------------------------------------------------------------
'WORD - 16 bit переменная
'DWORD - 32 bit переменная

Dim a As Dword
Dim a0 As Word At a + 0 Overlay
Dim a1 As Word At a + 2 Overlay
a0 = &B0000_0000_0000_0000 ' младшие 2 байта
a1 = &B0000_0000_0000_0001 ' старшие 2 байта
'В переменной a – &B0000_0000_0000_0001_0000_0000_0000_0000
‘                                   десятичное число 65536

' ---------------------------------------------------------------
' Четыре байта в одну четырехбайтную переменную
' ---------------------------------------------------------------
'BYTE - 8 bit переменная
'DWORD - 32 bit переменная
'LONG - 32 bit переменная

Dim a As Dword
Dim a0 As Byte At a + 0 Overlay
Dim a1 As Byte At a + 1 Overlay
Dim a2 As Byte At a + 2 Overlay
Dim a3 As Byte At a + 3 Overlay

a0 = &B0000_0000 ' младшие 2 байта
a1 = &B0000_0000
a2 = &B0000_0000 ' старшие 2 байта
a3 = &B0100_0000

'В переменной a – &B0100_0000_0000_0000_0000_0000_0000_0000
‘                                  десятичное число 1073741824

Аналогично для LONG, только (!):
В переменной типа LONG старший бит старшего байта отвечает за знак числа
При a3 = &B1100_0000
В переменной a – &B1100_0000_0000_0000_0000_0000_0000_0000
                                   десятичное число -1073741824 (!)

' ---------------------------------------------------------------
Объявленные таким образом переменные (выделены):
Dim a0 As Byte At a + 0 Overlay
Dim a1 As Byte At a + 1 Overlay
Dim a2 As Byte At a + 2 Overlay
Dim a3 As Byte At a + 3 Overlay
... не являются физическими переменными, т.е. не используют ячейки памяти, а являются указателями на соответствующие байты переменной, с которой описаны (в данном случае A).

Тем не менее к ним можно обращаться и использовать, как реальные переменные.
Только при этом необходимо учитывать, что изменения отразятся на значении переменной, в описании которой они присутствуют.
' ---------------------------------------------------------------

С переменной типа SINGLE или DOUBLE такой "фокус" уже не пройдет... ;)
Переменные этого типа "устроены" по-другому - Типы переменных в Bascom...
Пример:
Dim A As Single
Dim B As Double

Dim a0 As Byte At a + 0 Overlay
Dim a1 As Byte At a + 1 Overlay
Dim a2 As Byte At a + 2 Overlay
Dim a3 As Byte At a + 3 Overlay

Dim b0 As Byte At b + 0 Overlay
Dim b1 As Byte At b + 1 Overlay
Dim b2 As Byte At b + 2 Overlay
Dim b3 As Byte At b + 3 Overlay

a0 = 85 : a1 = 170 : a2 = 85 : a3 = 170
b0 = 85 : b1 = 170 : b2 = 85 : b3 = 170

В результате:
А = -0.0                  - SINGLE
В = 0                      - DOUBLE

' ---------------------------------------------------------------
Еще про Overlay рассказано в этой теме

Отредактировано Nord (2019-07-18 22:42:30)