|
Как получить 8-й бит из числа?
|
|||
---|---|---|---|
#18+
Всем привет. Думал это делает get_bit. Но он выдает какую-то ерунду. Возмем, например число 256. Это 2 в 8-й степени. Переводим в биты: Код: sql 1. 2.
А теперь пробую побитно взять get_bit для него: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
1000000110000 не равно 000100000000 Как можно вычислить этот бит из числа int? 000 1 00000000 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 15:04 |
|
Как получить 8-й бит из числа?
|
|||
---|---|---|---|
#18+
lr2, get_bit и есть только он слева биты считает Код: plaintext 1. 2. 3. 4.
а вот ::text::bytea - тут лишнее и только все запутывает. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 15:37 |
|
Как получить 8-й бит из числа?
|
|||
---|---|---|---|
#18+
lr2, еще наличие проставленного 8го бита так можно в числе select (256 & power(2, 8 )::int)::boolean; bool ------ t -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 15:43 |
|
Как получить 8-й бит из числа?
|
|||
---|---|---|---|
#18+
не так немного Код: sql 1.
256 & 256 == 256 к булу прикаститься как true ну хотя и так и так будет true или false :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2020, 15:54 |
|
Как получить 8-й бит из числа?
|
|||
---|---|---|---|
#18+
Maxim Boguk lr2, get_bit и есть только он слева биты считает Код: plaintext 1. 2. 3. 4.
а вот ::text::bytea - тут лишнее и только все запутывает. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru Да, спасибо!!! Работает!!! Я тут только одного не пойму, что такое 12-8-1. Ну 8 - это вроде как 8-й бит. А остальное что что? Развернутого описания get_bit чет не нашел. Только такое: get_bit(string, offset) int Извлекает бит из строки get_bit('Th\000omas'::bytea, 45) 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 12:24 |
|
Как получить 8-й бит из числа?
|
|||
---|---|---|---|
#18+
lr2 [ Да, спасибо!!! Работает!!! Я тут только одного не пойму, что такое 12-8-1. Ну 8 - это вроде как 8-й бит. А остальное что что? Развернутого описания get_bit чет не нашел. Только такое: get_bit(string, offset) int Извлекает бит из строки get_bit('Th\000omas'::bytea, 45) 1 Развернутое описание get_bit в функциях для bitstring https://www.postgresql.org/docs/13/functions-bitstring.html и звучит оно как Код: plaintext 1. 2. 3. 4. 5.
Соответственно 12 это от bit(12) потому что считаем слева... -1 потому что самый левый бит у нее номер ноль имеет а не один (так что для вашей нумерации еще надо единицу отнять). Решение ниже Код: plsql 1.
на самом деле проще и понятнее но работает только до 30того бита (ну или в варианте bigint 1::bigint<<62 до 62 бита). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 14:10 |
|
|
start [/forum/topic.php?fid=53&msg=40021765&tid=1994359]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 229ms |
0 / 0 |