Сборка из сообщений сайта и Справки 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)