9.6. ФÑнкÑии и опеÑаÑоÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¸ÑовÑми ÑÑÑоками
Ð ÑÑом Ñазделе опиÑÑваÑÑÑÑ ÑÑнкÑии и опеÑаÑоÑÑ, пÑедназнаÑеннÑе Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¸ÑовÑми ÑÑÑоками, Ñо еÑÑÑ Ñ Ð´Ð°Ð½Ð½Ñми Ñипов bit и bit varying. Ðомимо обÑÑнÑÑ
опеÑаÑоÑов ÑÑавнениÑ, Ñ Ñакими даннÑми можно иÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ, пеÑеÑиÑленнÑе в ТаблиÑе 9.14. ÐамеÑÑÑе, ÑÑо опеÑаÑоÑÑ &, | и # ÑабоÑаÑÑ ÑолÑко Ñ Ð´Ð²Ð¾Ð¸ÑнÑми ÑÑÑоками одинаковой длинÑ. ÐпеÑаÑоÑÑ Ð¿Ð¾Ð±Ð¸Ñового Ñдвига ÑоÑ
ÑанÑÑÑ Ð´Ð»Ð¸Ð½Ñ Ð¸ÑÑ
однÑÑ
ÑÑÑок, как показано в пÑимеÑаÑ
.
ТаблиÑа 9.14. ÐпеÑаÑоÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¸ÑовÑми ÑÑÑоками
| ÐпеÑаÑÐ¾Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|
|| | конкаÑенаÑÐ¸Ñ | B'10001' || B'011' | 10001011 |
& | биÑовÑй AND | B'10001' & B'01101' | 00001 |
| | биÑовÑй OR | B'10001' | B'01101' | 11101 |
# | биÑовÑй XOR | B'10001' # B'01101' | 11100 |
~ | биÑовÑй NOT | ~ B'10001' | 01110 |
<< | биÑовÑй Ñдвиг влево | B'10001' << 3 | 01000 |
>> | биÑовÑй Ñдвиг впÑаво | B'10001' >> 2 | 00100 |
СледÑÑÑие ÑÑнкÑии ÑзÑка SQL ÑабоÑаÑÑ ÐºÐ°Ðº Ñ ÑимволÑнÑми, Ñак и Ñ Ð±Ð¸ÑовÑми ÑÑÑоками: , length, bit_length, octet_length, position, substring.overlay
С биÑовÑми и двоиÑнÑми ÑÑÑоками ÑабоÑаÑÑ ÑÑнкÑии и get_bit. ÐÑи ÑабоÑе Ñ Ð±Ð¸ÑовÑми ÑÑÑоками ÑÑи ÑÑнкÑии нÑмеÑÑÑÑ Ð±Ð¸ÑÑ Ñлева напÑаво и ÑамÑй левÑй Ð±Ð¸Ñ ÑÑиÑаеÑÑÑ Ð½ÑлевÑм.set_bit
ÐÑоме Ñого, ÑелÑе знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑеобÑазоваÑÑ Ð² Ñип bit и обÑаÑно. ÐапÑимеÑ:
44::bit(10) 0000101100 44::bit(3) 100 cast(-44 as bit(12)) 111111010100 '1110'::bit(4)::integer 14
ÐамеÑÑÑе, ÑÑо пÑиведение к ÑÐ¸Ð¿Ñ Â«bit» без Ð´Ð»Ð¸Ð½Ñ Ð±ÑÐ´ÐµÑ Ð¾Ð·Ð½Ð°ÑаÑÑ Ð¿Ñиведение к bit(1), и в ÑезÑлÑÑаÑе бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑен ÑолÑко один менее знаÑаÑий Ð±Ð¸Ñ ÑиÑла.
ÐÑимеÑание
ÐÑиведение Ñелого ÑиÑла к ÑÐ¸Ð¿Ñ bit(n) копиÑÑÐµÑ Ð¿ÑавÑе n Ð±Ð¸Ñ ÑиÑла. ÐÑли же Ñелое пÑеобÑазÑеÑÑÑ Ð² биÑовÑÑ ÑÑÑÐ¾ÐºÑ Ð±Ð¾Ð»ÑÑей длинÑ, Ñем ÑÑебÑеÑÑÑ Ð´Ð»Ñ ÑÑого ÑиÑла, она дополнÑеÑÑÑ Ñлева биÑами знака ÑиÑла.