powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Битовые значения
25 сообщений из 127, страница 1 из 6
Битовые значения
    #39606759
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Есть поле, тип smallint, назовем его NoPay, в таблице Family
В этом поле хранится десятичное число.
На самом деле это побитное значение из 8 бит: 0 или 1. Последовательность - 7654 3210

1. Возможно ли запросом выбрать все записи у которых бит1 установлено 1, т.е. установлен некий признак.
2. Возможно ли запросом выбрать все записи у которых бит2 установлено 1, т.е. установлен некий признак.
3. Возможно ли запросом выбрать все записи у которых бит3 установлено 1, т.е. установлен некий признак.

Если возможно, покажите пожалуйста на конкретном примере:
select NoPay from Family where ....

--------------------------
Firebird 3.0.1.32609;
IBExpert 2017.3.12.1;
Windows 10 32-bit;
4Gb RAM;
SSD 512Mb + HDD 1 Tb;
Настройки по умолчанию

Среда разработки:
Delphi XE2 + FIBPlus 7.4
...
Рейтинг: 0 / 0
Битовые значения
    #39606762
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Битовые значения
    #39606764
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,
Я нашел ее и читал. Но не понял как :(
Помогите примером пожалуйста
...
Рейтинг: 0 / 0
Битовые значения
    #39606770
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushНа самом деле это побитное значение из 8 бит: 0 или 1. Последовательность - 7654 3210
это что, битовые значения? Что значит "последовательность"? это что, номера битов?
тогда 2^7 + 2^6 + 2^5 и т.д.

https://ru.wikipedia.org/wiki/Двоичная_система_счисления
...
Рейтинг: 0 / 0
Битовые значения
    #39606787
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

akrushЕсли возможно, покажите пожалуйста на конкретном примере:
select NoPay from Family where ....

Код: sql
1.
2.
3.
4.
5.
select NoPay
  from Family
 where bin_and( NoPay, 0x01 ) = 0x01  -- для 0-го бита
 where bin_and( NoPay, 0x02 ) = 0x02  -- для 1-го бита
 where bin_and( NoPay, 0x04 ) = 0x04  -- для 2-го бита


С уважением, Polesov.
...
Рейтинг: 0 / 0
Битовые значения
    #39606853
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,
спасибо, попробую.
еще вопрос: предположим у меня в битах 4-7 хранится некоторое количество, например 6 (это 0111). а как этой функцией проверить это число?
...
Рейтинг: 0 / 0
Битовые значения
    #39606863
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush в битах 4-7 хранится некоторое количество, например 6 (это 0111)
0111 - это 7. Потому что биты идут справа налево. Но даже если бы они шли слева направо, то это было бы 14.
И в 4-7 битах никак не может храниться ни 7, ни 6.
Потому что
4 бит - 2^4 = 16
5 бит - 2^5 = 32
6 бит - 2^6 = 64
7 бит - 2^7 = 128

p.s. я считаю, что только в 2018 году такое возможно услышать от программиста.
...
Рейтинг: 0 / 0
Битовые значения
    #39606898
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvИ в 4-7 битах никак не может храниться ни 7, ни 6.


Может, конечно. В 4-х битах может храниться любое число, которое влезает в 4 бита :)
Это вопрос представления информации в данном конкретном случае. Может, он там в 8 битах четыре двухбитовых числа хранит. Или два трехбитовых. Или еще как. Не возбраняется.
...
Рейтинг: 0 / 0
Битовые значения
    #39606899
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushеще вопрос: предположим у меня в битах 4-7 хранится некоторое количество, например 6 (это 0111). а как этой функцией проверить это число?

bit_shr(NoPay, 4)
...
Рейтинг: 0 / 0
Битовые значения
    #39606917
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

akrushеще вопрос: предположим у меня в битах 4-7 хранится некоторое количество, например 6 (это 0111). а как этой функцией проверить это число?
Исходим из того, что биты нумеруются справа налево начиная с нуля.
Если значение имеет тип SMALLINT - 16 бит, INTEGER - 32 бита.
Для SMALLINT нас интересуют биты, помеченные 1:
Код: sql
1.
0000000011110000


Как узнать, что в указанных битах содержится число 6?
Надо сдвинуть битовое значение вправо на 4, выделить по маске 4 бита и сравнить:
Код: sql
1.
bin_and( bin_shr( NoPay, 4 ), 0x0F ) = 6


P.S. вообще-то 6 = 0110b :-)

С уважением, Polesov.
...
Рейтинг: 0 / 0
Битовые значения
    #39606961
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvp.s. я считаю, что только в 2018 году такое возможно услышать от программиста.

Мне ещё дико интересен характер этой битовой информации. Есть одно подозрение.
...
Рейтинг: 0 / 0
Битовые значения
    #39607119
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov, так и будем решать за студоту домашку? :)
...
Рейтинг: 0 / 0
Битовые значения
    #39607123
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаМне ещё дико интересен характер этой битовой информации.Есть разница? Автор не понимает, как работает битовая маска, а все туда же экономить на спичках.

Автор, сколько миллиардов записей надо окучить, чтобы стала заметна экономия диска на этих самых битах?
...
Рейтинг: 0 / 0
Битовые значения
    #39607146
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,
Увы биты достаются по наследству при конвертации Клариона в Огнептица.
В таблицах куча полей с побитной "шифровкой". Вот и приходится изгаляться чтобы расписать их на разные столбцы.
Всегда это делал перебором каждой строки + Делфи.
Задался вопросом, а можно ли сразу запросом.

Принципиально ответ уже получил - МОЖНО.
Как я понял можно даже сразу update написать который махом все пропишет.
Теперь буду "курить бамбук" и "грызть гранит науки", чтобы понять как эти битовые маски работают.

Спасибо за примеры. Увы вопросы будут еще появляться и я буду их задавать
...
Рейтинг: 0 / 0
Битовые значения
    #39607149
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devPolesov, так и будем решать за студоту домашку? :)

Неужели вы думаете, что если человеку что-то непонятно, - это студент которому лень в чем-то разбираться?
Да мне тяжело давались и даются разные системы счисления.
Но это не повод вешать клеймо "студота" и "домашка"
...
Рейтинг: 0 / 0
Битовые значения
    #39607162
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush> В таблицах куча полей с побитной "шифровкой".
akrush> Вот и приходится изгаляться чтобы расписать их на разные столбцы.

А, так это ты из гамна кофетку пытаешься сделать.
Это дело бравое, Бог в помощь. Только не забудь
потом оттестировать, чтобы не получилось, что
перевёл рабочий (хоть и ужасный) гомнокод (БД)
в красивый, но неправильный.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39607189
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,
Я проверяю. У меня есть контрольный список строк
...
Рейтинг: 0 / 0
Битовые значения
    #39607219
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамakrush> В таблицах куча полей с побитной "шифровкой".
akrush> Вот и приходится изгаляться чтобы расписать их на разные столбцы.

А, так это ты из гамна кофетку пытаешься сделать.
Это дело бравое, Бог в помощь. Только не забудь
потом оттестировать, чтобы не получилось, что
перевёл рабочий (хоть и ужасный) гомнокод (БД)
в красивый, но неправильный.


В файл-серверных базах, видимо, обычное поведение. Экономили на размере самой базы, а индексы и так фигово работали (работают). Правильно делает, что схему данных меняет. Зачёт!
...
Рейтинг: 0 / 0
Битовые значения
    #39607241
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush, если я не прав, приношу извинения! :)

С системами счисления всё элементарно!
В десятичной системе счисления по основанию 10 имеем следующие разряды числа:
Разряд 0 (единицы): N*10 0
Разряд 1 (десятки): N*10 1
Разряд 2 (сотни): N*10 2
Разряд 3 (тысячи): N*10 3
и т.д., где N - значение в разряде от 0 до 9

В двоичной системе счисления по основанию 2 имеем следующие разряды:
Разряд 0 (единицы): N*2 0
Разряд 1 (двойки): N*2 1
Разряд 2 (четвёрки): N*2 2
Разряд 3 (восьмёрки): N*2 3
и т.д., где N - значение в разряде 0 или 1
Как видим, двоичная система еще проще и установленные в 1 биты в машинном слове (16 бит) можно сконвертировать в десятичную систему по следующей таблице:
Код: plaintext
1.
2.
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|32768|16384| 8192| 4096| 2048| 1024|  512|  256|  128|   64|   32|   16|    8|    4|    2|    1|
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
...
Рейтинг: 0 / 0
Битовые значения
    #39607262
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Да неправда! Если в первом и втором бите стоят единицы, то в десятичной системе это 3 (три). Без побитовых операций никуда!
...
Рейтинг: 0 / 0
Битовые значения
    #39607276
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, что "неправда"? Если, к примеру, в установлены в 1 разряды 0,3,5,10, то это 1+8+32+1024=1065
...
Рейтинг: 0 / 0
Битовые значения
    #39607293
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushIvan_Pisarevsky,
Увы биты достаются по наследству при конвертации Клариона в Огнептица.
В таблицах куча полей с побитной "шифровкой". Вот и приходится изгаляться чтобы расписать их на разные столбцы.


Я так и думал. Через это приходится проходить почти всем, кто успел наработать что-то полезное на плоских БД. Советую ещё подумать о том, чтобы организовать нормальную структуру - свести значения в нечисловых столбцах в таблицы-справочники и в столбцах рабочих таблиц использовать ссылки.
...
Рейтинг: 0 / 0
Битовые значения
    #39607336
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Это правда. Зачем таблица-то? Я просто не понял её назначения. Видимо, просто азы. Которые все знают. Но они неприменимы в современной реальной жизни.
...
Рейтинг: 0 / 0
Битовые значения
    #39607340
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, чтобы человеку, совершенно не знакомому с азами бинарной системы счисления, было проще ориентироваться - какой бит машинного слова какому десятичному числу соответствует без использования калькулятора в режиме "Программист".

> Но они неприменимы в современной реальной жизни.

Почему неприменимы? Что-то в битовой системе счисления принципиально изменилось? Для понимания принципов вполне подойдет.
...
Рейтинг: 0 / 0
Битовые значения
    #39607347
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devкакой бит машинного слова какому десятичному числу соответствуетДля битовой маски бесполезные знания.
rdb_devДля понимания принципов вполне подойдет.Человеку нужно кларион отфайрбёрдить, а не общие принципы обкатывать, вроде как.
...
Рейтинг: 0 / 0
25 сообщений из 127, страница 1 из 6
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Битовые значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]