Работа с битами в VB60...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.07.2007 (Чт) 11:17

как вариант:
If (Not CBool(LPTValue And 2 ^ 7)) Or (LPTValue And 2 ^ 6) Then
Изображение

Aquarius
Постоялец
Постоялец
 
Сообщения: 692
Зарегистрирован: 04.11.2002 (Пн) 13:13
Откуда: Russia

Сообщение Aquarius » 26.07.2007 (Чт) 11:53

Но Not - уже является логическим оператором и сбивает само условие.


Смею поправить, в VB нет логических операторов, только побитовые.

Т.е. надо проверить, например, стоит ли в 7-м бите 0 и в 6 - 1, не нагородив при этом лестницу из IF-ов.

Проверка на то что бит установлен AND + макска
Установка бита OR + маска
Инвертирование бита XOR + маска.

Соответственно если нужно проверить что бит сброшен нужно использовть Var And маска = false или Not (Var And маска)

в твоем случае.
Код: Выделить всё
If (Not (LPTValue And 2 ^ 7)) And (LPTValue And 2 ^ 6) Then

т.е. проверяем что 7-й бит равен 0 и одновременно 6-й бит = 0.
Я правильно понял?
LPTValue And 2 ^ 7

Никогда так не делай, в смысле вот это ^.
(Всем изучать ASSEMBLER)
www.Wasm.ru, www.FlatAssembler.Net

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.07.2007 (Чт) 12:12

Aquarius писал(а):Not (Var And маска)

Нет, так нельзя.
Изображение

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

...

Сообщение Rojohn » 26.07.2007 (Чт) 13:16

Маска - это, конечно хорошо, но мне надо не все биты вместе проверять, а по-отдельности. Т.е. какой-нибудь из них может быть 1 (оператор OR). Если писать по маске, то этих масок будет 2 штуки, т.е. ничем не лучше этого примера... А чем тебе не нравится оператор ^?

tyomitch
как вариант:
If (Not CBool(LPTValue And 2 ^ 7)) Or (LPTValue And 2 ^ 6) Then


А Or будет правильно работать? Или вторую скобку тоже надо заCBoolить?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.07.2007 (Чт) 14:32

Будет. Только с Not косяки, потому что для всех значений x, кроме 0 и -1, x и Not x одновременно истинны.
Изображение

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

?

Сообщение Rojohn » 26.07.2007 (Чт) 15:32

А как лучше сделать, чтоб без косяков?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Aquarius
Постоялец
Постоялец
 
Сообщения: 692
Зарегистрирован: 04.11.2002 (Пн) 13:13
Откуда: Russia

Сообщение Aquarius » 26.07.2007 (Чт) 16:50

проверяем что 7-й бит равен 0 и одновременно 6-й бит = 0.


я имел в виду проверяем что 7-й бит равен 0 и одновременно 6-й бит = 1.

2 tyomitch
Нет, так нельзя.

Если ты имеешь в виду нельзя использовать имя Var то я согласен.
(Всем изучать ASSEMBLER)
www.Wasm.ru, www.FlatAssembler.Net

Aquarius
Постоялец
Постоялец
 
Сообщения: 692
Зарегистрирован: 04.11.2002 (Пн) 13:13
Откуда: Russia

Сообщение Aquarius » 26.07.2007 (Чт) 17:00

2 tyomitch
Виноват, конечно, нельзя.

Нужно сравнивать с 0.
Not не прокатит.
(Всем изучать ASSEMBLER)
www.Wasm.ru, www.FlatAssembler.Net

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot] и гости: 37

    TopList