Всем привет, кто-нибудь знает как можно бороться с ошибками в бинарных операциях
пример:
l=100 Debug (l>192) Debug (100>192)
выдаст следующее:
192
0
а должно быть
0
0
почему так?
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Баги с использованием бинарных операций
Всем привет, кто-нибудь знает как можно бороться с ошибками в бинарных операциях
пример:
l=100 Debug (l>192) Debug (100>192)
выдаст следующее:
192
0
а должно быть
0
0
почему так?
На сколько мне известно это не бинарная операция, а операция сравнения, в данном случае бессмысленная, потому что ничего не сравнивается.
Можно в двух словах, что должен делать этот код?
нет..это бинарная операция.
она должна давать или ложь или истину
получается что это баг компилятора
Отредактировано Yevgeny_1978 (06.12.2010 11:37:36)
нет..это бинарная операция.
она должна давать или ложь или истину
Тогда правильнее это назвать логической операцией.
Только вот ложь или истину чего, больше или меньше чтоли?
программа должна выдать 2 раза ложь, так как 100 не больше 192, а на выходе получается 192 (а должно быть 0) и 0 (все правильно)
странное поведение компилятора
хотя компиляторы С выдадут и там и там нули.
может кто-нибудь знает как обойти эту проблему?
100>192=0
Отредактировано Yevgeny_1978 (06.12.2010 11:45:24)
странное поведение компилятора
В описании синтаксиса языка не указано про такое поведение операторов сравнения.
Вот так всё работает правильно
l=100 If l>192 Debug "l больше 192" Else Debug "l меньше 192" EndIf If 100>192 Debug "100 больше 192" Else Debug "100 меньше 192" EndIf
получается что такие операции нельзя использовать в выражениях.
это конечно очень плохо.. не доработка разработчиков компилятора.
Есть решение данного вопроса. Может кому и проигодиться:
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
получается что такие операции нельзя использовать в выражениях.
это конечно очень плохо.. не доработка разработчиков компилятора.
Уже можно.
l=100 Debug Bool(l>192) Debug Bool(100>192)
спасибо за подсказку!
Ищу наставника (ментора). | PureBasic для Windows | 27.07.2022 |
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Баги с использованием бинарных операций