PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Баги с использованием бинарных операций


Баги с использованием бинарных операций

Сообщений 1 страница 10 из 10

1

Всем привет, кто-нибудь знает как можно бороться с ошибками в бинарных операциях

пример:

Код:
      l=100
      Debug (l>192)
      Debug (100>192)

выдаст следующее:

192
0

а должно быть

0
0
почему так?

0

2

На сколько мне известно это не бинарная операция, а операция сравнения, в данном случае бессмысленная, потому что ничего не сравнивается.
Можно в двух словах, что должен делать этот код?

0

3

нет..это бинарная операция.

она должна давать или ложь или истину

получается что это баг компилятора

Отредактировано Yevgeny_1978 (06.12.2010 11:37:36)

0

4

Yevgeny_1978 написал(а):

нет..это бинарная операция.
она должна давать или ложь или истину

Тогда правильнее это назвать логической операцией.
Только вот ложь или истину чего, больше или меньше чтоли?

0

5

программа должна выдать 2 раза ложь, так как 100 не больше 192, а на выходе получается 192 (а должно быть 0) и 0 (все правильно)
странное поведение компилятора
хотя компиляторы С выдадут и там и там нули.
может кто-нибудь знает как обойти эту проблему?

100>192=0

Отредактировано Yevgeny_1978 (06.12.2010 11:45:24)

0

6

Yevgeny_1978 написал(а):

странное поведение компилятора

В описании синтаксиса языка не указано про такое поведение операторов сравнения.
Вот так всё работает правильно

Код:
l=100
If l>192
  Debug "l больше 192"
Else
  Debug "l меньше 192"
EndIf

If 100>192
  Debug "100 больше 192"
Else
  Debug "100 меньше 192"
EndIf

0

7

получается что такие операции нельзя использовать в выражениях.
это конечно очень плохо.. не доработка разработчиков компилятора.

0

8

Есть решение данного вопроса. Может кому и проигодиться:

Macro eval(expr)
   expr And expr
EndMacro

Define a.s= "hi"
Define b.i = 5
Define d.f = 0.001

Debug eval(a = "hii" )  ;false
Debug eval(a = "hi")  ;true
Debug eval(b > 3)  ; true
Debug eval(b < 3)  ; false
Debug eval(d = 0.001 And b = 5) ;true

0

9

Yevgeny_1978 написал(а):

получается что такие операции нельзя использовать в выражениях.
это конечно очень плохо.. не доработка разработчиков компилятора.

Уже можно.

Код:
l=100
Debug Bool(l>192)
Debug Bool(100>192)

0

10

спасибо за подсказку!

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Баги с использованием бинарных операций