Для заданного двоичного числа, скажем, длиной более 128, я хочу проверить, включен ли конкретный бит (скажем, 30-й бит). Я использую функцию utl_raw.bit_and для выполнения между двумя двоичными числами.Я ожидаю, что входное двоичное число будет длиннее 128, и тогда я не могу использовать функцию oracle bitand.Когда я делаю bit_and, я вижу дополнительный 0, добавленный к результату.Я не уверен, как он туда попал, когда длина обоих входов одинакова.Вот мой пример sql
SELECT
A,
LENGTH(A) LENGTH_A,
B,
LENGTH(B) LENGTH_B,
UTL_RAW.BIT_AND(TRIM(A),TRIM(B)) AND_AB,
LENGTH(UTL_RAW.BIT_AND(TRIM(A), TRIM(B))) LENGTH_AND_AB
FROM (
SELECT
TRIM(RPAD('0', LENGTH('1111111111111100000000000000011') - 30 ,'0')) || '1' ||TRIM(RPAD('0', 29, '0')) A,
'1111111111111100000000000000011' B FROM DUAL);
Это результат операции
A LENGTH_A B LENGTH_B AND_AB LENGTH_AND_B
0100000000000000000000000000000 31 1111111111111100000000000000011 31 00100000000000000000000000000000 32