Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

22 Май 2022, 13:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Битовые опреации  (Прочитано 600 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 1 088


« Стартовое сообщение: 3 Апрель 2022, 16:13 »

В LO Basic есть битовые операторы типа (?):

& ( AND )
| ( OR )
^ ( XOR )
~  ( NOT )
<<(сдвиг влево)
>>(сдвиг вправо)

Функции листа:
https://help.libreoffice.org/7.3/en-US/text/scalc/01/04060120.html

Edit:
Есть число 7 (=1+2+4), примеру. Как определить, что установлены 1, 2 и 3 биты (2^0, 2^1, 2^2)? Вот что-то забыл я...
« Последнее редактирование: 3 Апрель 2022, 16:31 от eeigor » Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
sokol92
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 909


WWW
« Ответ #1: 3 Апрель 2022, 16:28 »

 Это вопрос или утверждение? Улыбка
Записан

Владимир.
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 1 088


« Ответ #2: 3 Апрель 2022, 16:29 »

Теперь "вопрос"
Если битовых операций нет, то через FunctionAccess, или я делал раньше какой-то простой цикл, не помню...
« Последнее редактирование: 3 Апрель 2022, 16:32 от eeigor » Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
sokol92
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 909


WWW
« Ответ #3: 3 Апрель 2022, 16:36 »

Битовые операции есть: Or, And, Xor.

Код:
 Msgbox (6 And 10)

вернет 2.

Соответственно, 3 бит проверяем так:

Код:
If (n and 4)>0 Then
« Последнее редактирование: 3 Апрель 2022, 16:46 от sokol92 » Записан

Владимир.
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 1 088


« Ответ #4: 3 Апрель 2022, 16:54 »

Откровенно говоря, понял плохо...
Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
sokol92
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 909


WWW
« Ответ #5: 3 Апрель 2022, 17:01 »

Посмотрите это и другие сообщения в теме Владимира Захарова (ZVI).
 
« Последнее редактирование: 3 Апрель 2022, 17:02 от sokol92 » Записан

Владимир.
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 1 088


« Ответ #6: 3 Апрель 2022, 20:15 »

Работают оба варианта

Код:
Sub Test_BitOperations()
' NOTE: Allowed input value combinations: 1, 2, 3, 4, 5, 6, 7
' 1st option is 1 (= 2 ^ 0)
' 2nd option is 2 (= 2 ^ 1)
' 3rd option is 4 (= 2 ^ 2)
' Combinations: 3 = 1 + 2
'              6 = 1 + 5
'              7 = 1 + 2 + 4
Dim nValue&: nValue = 6  ' <- Set input value here
Dim aOptions&(1 To 3), i%

For i = 1 To 3
aOptions(i) = (nValue Mod 2 ^ i) \ 2 ^ (i - 1)
Next
MsgBox Join(aOptions, Chr(10))

Erase aOptions()
ReDim aOptions&(2)
Dim nNewValue&
For i = 0 To 2
aOptions(i) = Abs(((2 ^ i) And nValue) > 0)
If ((2 ^ i) And nValue) > 0 Then
nNewValue = nNewValue + 2 ^ i
End If
Next
MsgBox Join(aOptions, Chr(10)) & Chr(10) _
& Chr(10) & nNewValue
End Sub
« Последнее редактирование: 3 Апрель 2022, 20:34 от eeigor » Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!