Страница 1 из 1

Скрипт: Битовые операции или SQL - ext.калькулятор для Лоции

Добавлено: 27 июл 2007, 06:17
Александр
благодаря динамически формируемым запросам Лоции - для битовых операций можно использовать следующий простой код в связке Лоция->SQL->Лоция

Код: Выделить всё

mask=Set(16384)
byte = AttribGetDefault ( My_Obj , LinkID_0 , byte_atr , 0 )
...
and
прочитать значение бита по маске
byte = Set (if( number(f_ExecSQLSelect_2('select cast('+string(byte)+' as int) & cast('+string(mask)+' as int)' ,'','') )=0,0,1 ))

...
или or-'|' или xor '^'
...
или not
byte = Set ( number(f_ExecSQLSelect_2('select ~cast(byte as tinyint)','','')))
и ведь что приятно - 'преобразование типов' и прочие прелести описаны просто текстом-никаких проблем. а то для нашего типа numeric пришлось бы городить огород если делать все на чистом SQL
2 Крупский
это тоже конечно всем известно но я например раньше не знал об этом
и использовал такой неудобоваримый код как

Код: Выделить всё

byte = Set ( if(abs( Int (byte /mask) - Int (byte  / (mask*2) )*2 )=0,'0','1') )
...and
byte = Set ( byte-mask )
...or
byte = Set ( byte+mask)
так что делиться скорее полезно чем вредно :wink: в смысле - не бесполезно :wink: