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

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

a + b - bitand(a,b)

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

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

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

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

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

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

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

comments

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

  • 29 აგვისტო, 2011 at 23:33
    Permalink

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

    Reply
  • 29 აგვისტო, 2011 at 23:38
    Permalink

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

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

    Reply
  • 02 სექტემბერი, 2011 at 01:19
    Permalink

    http://www.jlcomp.demon.co.uk/faq/bitwise.html
    ნახე ეს ლინკი, შეიძლება გამოგადგება 🙂 ისე მეც გამიკვირდა, რომ ნორმალურად არა აქვს Oracle-ს ეს ფუნქციონალი გაკეთებული.

    Reply
  • 02 სექტემბერი, 2011 at 13:17
    Permalink

    @Czar

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

    Reply

კომენტარის დატოვება

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