ბიტური ოპერაციები ორაკლში

დღეს ზედმეტი მოვინდომე და ბაზაში მონაცემების ბიტმასკების სახით შენახვა გადავწყვიტე, რომელიც მერე ისევ თვითონ ბაზას უნდა დაემუშავებინა. შემდეგ ვნახე, რომ ორაკლში არ არის რეალიზებული ბიტური ოპერაციები და არის მხოლოდ ერთი – bitand() ფუნქცია, რომელიც ბიტურ “and”-ს აკეთებს რიცხვებზე.
“or” და “xor”-ის მიღებაც ამ ფუნქციის გამოყენებით მარტივად შეიძლება. მაგალითად a და b რიცხვებზე “or” ოპერაცია გამოვა

a + b - bitand(a,b)

ხოლო “xor”-ს მივიღებთ თუ კიდევ ერთხელ გამოვაკლებთ:

a + b - bitand(a,b) - bitand(a,b)

არც ბიტური წაძვრები (shift >>) აქვს, მაგრამ მაგის ჩანაცვლება 2-ზე გამრავლებით და გაყოფით შეიძლება (ეგ ალბათ ჯობია big endian და little endian ვარიანტებზე წინასწარ შემოწმდეს ხოლმე, რომ მეორე მხარეს არ წაძრას ვიდრე ველოდებით).

MySQL-ში არ დამჭირვებია, მაგრამ ეხლა შევხედე და ჰქონია პირდაპირ &, |, ~, ^, <<, >> და თან bit_count() ფუნქციაც, რომელიც ჩართულ ბიტების რაოდენობას აბრუნებს. მათი გამოყენება პირდაპირ sql ქვერებშიც შეიძლება.

ბოლოს დამაინტერესა და სხვა ბაზებსაც გადავწვდი. PostgreSQL-ში უკანასკნელის მსგავსად ყველა არის რეალიზებული, MS SQL-ში კი მხოლოდ and, or და xor არიან.

პრინციპში დიდი გამოყენება ალბათ არ აქვთ, მაგრამ ზოგ შემთხვევაში ძალიან მოსახერხებელი გამოდის. მაგალითად, თუ ობიექტთან დაკავშირებული სტატიკური (თუნდაც არასტატიკური) პატარა სიმრავლის შენახვაა საჭირო, ანუ ამ ობიექტისთვის სიმრავლეში რომელი ელემენტებია ”ჩართული” და რომელი არა.

4 thoughts on “ბიტური ოპერაციები ორაკლში

  1. ყველგან 2-ის ხარისხებზე გაყოფა ხორციელდება წაძვრებით და აქ პირიქით მოგიწია? =)

  2. ვაჰ =) ეგ შენი პირველი კომენტარია მგონი =)

    ეგრე გამოვიდა. მაგრამ მე ბევრი გამრავლება არ დამჭირვებია :) კვირის დღეების სიმრავლე მქონდა

  3. @Czar

    მადლობა :)
    ეს raw-ს გამოყენება ვნახე მაგრამ კიდევ კარგი ასეთი დიდი ფუნქციონალი არ მჭირდებოდა და bitand მეყო, თორემ მაგ პაკეტში ტესტირება და დებაგირება რა საშინელებაა ხომ წარმოგიდგენია :(

გამოხმაურება

თქვენი ელფოსტის მისამართი არ გამოქვეყნდება. აუცილებელი ველები მონიშნულია *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>