purebasic.info

PureBasic forum
Текущее время: Ср апр 24, 2019 3:19 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Проверка условия
СообщениеДобавлено: Сб янв 26, 2019 3:34 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 797
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
Что то не соображу как на пурике проверить бит на 0 и 1 в такой последовательности сначала на 0 потом на 1 :?: :
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
a=2;2бит =0
 
If a | %00000100;=0
a=55
ElseIf a & %00000100;=1
  a=66
EndIf
Debug a
 
a=6;2бит =1
 
If a | %00000100;=0
a=55
ElseIf a & %00000100;=1
  a=66
EndIf
Debug a
 


По другому вроде бы работает,может ошибка из за компиляции и проверки and :roll: ?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
a=2
 
If  a & %00000100;=1
a=55
ElseIf a | %00000100;=0
  a=66
EndIf
Debug a
 
a=6
 
If a & %00000100;=1
a=55
ElseIf a | %00000100;=0
  a=66
EndIf
Debug a
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Сб янв 26, 2019 4:17 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 456
Благодарил (а): 33 раз.
Поблагодарили: 50 раз.
Пункты репутации: 0
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a=2+4
 
If a & 4;=1
        a=55
Else
        a=66
EndIf
Debug a
 
If Not (a & 4);=1
        a=55
Else
        a=66
EndIf
Debug a



Последний раз редактировалось AZJIO Сб янв 26, 2019 4:18 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Сб янв 26, 2019 4:18 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1752
Откуда: Алматы
Благодарил (а): 16 раз.
Поблагодарили: 49 раз.
Пункты репутации: 5
так Петр же делал подобную "библиотеку" для битов :)

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
;{ битовые операции
Macro SetBit(Var, Bit) ; Установка бита.
  Var | (Bit)
EndMacro
Macro ClearBit(Var, Bit) ; Обнуление бита.
  Var & (~(Bit))
EndMacro
Macro TestBit(Var, Bit)
  Bool(Var & (Bit))
EndMacro
Macro NumToBit(Num) ; Позиция бита по его номеру. ; для вызова сет бит и клер бит.
  (1<<(Num))
EndMacro
Macro GetBits(Var, StartPos, EndPos)
  ((Var>>(StartPos))&(NumToBit((EndPos)-(StartPos)+1)-1))
EndMacro
;}



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Сб янв 26, 2019 4:23 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11439
Благодарил (а): 4 раз.
Поблагодарили: 461 раз.
Сергейчик писал(а):
как на пурике проверить бит на 0 и 1 в такой последовательности сначала на 0 потом на 1
Бит может иметь другое значение кроме 0 или 1?
Если нужно проверить установлен бит или нет, сделать несложно.
Код:
1
2
3
4
x.a=%01000100
For i=0 To 7
  Debug "Бит "+i+" = "+Bool(x & (1<<i))
Next i


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Сб янв 26, 2019 4:32 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 456
Благодарил (а): 33 раз.
Поблагодарили: 50 раз.
Пункты репутации: 0
Код:
1
2
3
4
5
6
7
8
a=4
 
If a ! 4;=0
        a=55
Else
        a=66
EndIf
Debug a


Это я посмотрел по таблице
LHS | RHS | Result
------------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0

почему не работает для a=6 незнаю


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Сб янв 26, 2019 4:46 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 797
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
Пётр писал(а):
Сергейчик писал(а):
как на пурике проверить бит на 0 и 1 в такой последовательности сначала на 0 потом на 1
Бит может иметь другое значение кроме 0 или 1?
Если нужно проверить установлен бит или нет, сделать несложно.
Код:
1
2
3
4
x.a=%01000100
For i=0 To 7
  Debug "Бит "+i+" = "+Bool(x & (1<<i))
Next i


Оказывается логически сложно.
А процедуру можно и свою сделать. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
a=%00000010;2бит =0
 
If Bool(a & %00000100)=0
a=55
ElseIf Bool(a &  %00000100)=1
  a=66
EndIf
 
Debug a
 
a=%00000110;2бит =1
 
If Bool(a &  %00000100)=0
a=55
ElseIf Bool(a &  %00000100)=1
  a=66
EndIf
Debug a
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Сб янв 26, 2019 4:49 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 456
Благодарил (а): 33 раз.
Поблагодарили: 50 раз.
Пункты репутации: 0
Сергейчик
я бы сказал в вашем примере нарушена логика. Условие проверяется многократно если значение имеет много возможных вариантов. А для 2-х вариантов (да и нет) достаточно одной проверки, вторая уже будет заведомо известна.

Код:
1
If Bool(a & %00000100)=0

ой, тут #True сравнивается с 0 для того чтобы возвратить #False. Точнее булево с 0, чтобы возвратить булево

Додумался наконец-то инверсия числа ~a
Код:
1
2
3
4
5
6
7
8
a=2+4
 
If ~a & 4;=0
        a=55
Else
        a=66
EndIf
Debug a



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Сб янв 26, 2019 5:46 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11439
Благодарил (а): 4 раз.
Поблагодарили: 461 раз.
Сергейчик писал(а):
Оказывается логически сложно.
Можно упростить.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a=%00000010;2бит =0
 
If a & %00000100=0
  a=55
Else
  a=66
EndIf
 
Debug a
 
a=%00000110;2бит =1
 
If a & %00000100=0
  a=55
Else
  a=66
EndIf
Debug a


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Ср янв 30, 2019 2:35 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 797
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
Бросил эту затею(по ней 2 младших бита отвечали за 2 своих задания)именно биты а не число 3
а остальные уже за другие задания как число(у него больше битовых вариантов)
если бы нашёл решение в одну процессорную команду управлять ими и проверять их то подумал бы
а так другое решение нашёл и счёт в переменной как положено с 0 бита.
а так как вариант можно так :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
a.i=3;0,1,2,3=первые 2 младших бита 00 01 10 11
     ;остальные применяем как число
 
For i=0 To 255 Step 1
 
  a|i<<2;устанавливаем счет от 0 с 2-го бита(2бит=счёту с младшего 0 бита);младшие ьиты 0 и 1 не трогаем
 
 ;далее условно select с case
  If a>>2=i
   
    Debug i
   
  EndIf
Next
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Ср янв 30, 2019 8:31 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6506
Благодарил (а): 28 раз.
Поблагодарили: 211 раз.
Пункты репутации: 57
Похоже на степень числа 2, только -1
Код:
1
2
3
4
5
 
For i = 0 To 8
  n.i=Pow(2,i)-1
  Debug n
Next


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Чт янв 31, 2019 3:41 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 797
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
Да обнуление забыл в примере :D
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
a.i=3;0,1,2,3=первые 2 младших бита 00 01 10 11 каждый на отдельное действие
     ;остальные применяем как число
 
For i=0 To 255 Step 1
  a&3
  a|i<<2;устанавливаем счет от 0 с 2-го бита(2бит=счёту с младшего 0 бита);младшие ьиты 0 и 1 не трогаем
 
 ;далее условно select с case
  If a>>2=i
   
    Debug i
   
  EndIf
Next
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Чт янв 31, 2019 4:59 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 793
Благодарил (а): 76 раз.
Поблагодарили: 23 раз.
Пункты репутации: 5
Сергейчик писал(а):
a.i=3;0,1,2,3=первые 2 младших бита 00 01 10 11 каждый на отдельное действие
;остальные применяем как число

а смысл связываться с битами? проверяй числа

так и непонял почему не получается наложить маску или использовать сдвиги


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Чт янв 31, 2019 5:19 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1752
Откуда: Алматы
Благодарил (а): 16 раз.
Поблагодарили: 49 раз.
Пункты репутации: 5
мож у него какие изначальные ограничения :) у меня например в битах кроется флаги включено\выключено требование какой-то определенной постройки. то есть 2 байта... или 3... а параметров там аж 14 штук.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Проверка условия
СообщениеДобавлено: Чт янв 31, 2019 7:50 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 456
Благодарил (а): 33 раз.
Поблагодарили: 50 раз.
Пункты репутации: 0
SereZa писал(а):
то есть 2 байта... или 3... а параметров там аж 14 штук.
Неужели это открытие? Я когда-то даже писал об этом страничку, только приход к этому был с другой стороны, не зная что такое битовый флаг пользуясь им.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB