powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / получить определенный бит числа
20 сообщений из 20, страница 1 из 1
получить определенный бит числа
    #39174234
BooksMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо замутить что-то типа
select * from mytable where get_bit(flags,5)=1

вот этот самый get_bit как получить. То есть, интересует чему равен пятий(n-ый) бит числа в двоичном представлении.
Например 77777 = 10010111111010001
пятый бит равен 0.
Надеюсь, понятно объяснил...
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174245
BooksMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно строкой хранить, но тогда места будет много занимать. Хочется оптимизировать.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174256
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть AND по маске. Есть целочисленный % с маской.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174261
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BooksMaster,

BIT_AND()
Но будет полный перебор таблицы с вытекающим быстродействием.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174266
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftBIT_AND()Сорри, это не то.

&
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174316
BooksMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

под полным перебором ты имеешь ввиду, что индексация не будет участвовать в процессе?
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174396
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависит от структуры хранения данных и текста запроса. Но ЭТО условие будет обрабатываться строго полным сканом - возможно, что и индекса.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174807
BooksMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, будет ли целесообразнее создать 32 поля со значением boolean или все таки делать вышеописанным способом? В таблице всего лишь несколько тысяч записей. Но этот запрос выполняется несколько десятков раз в секунду.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174809
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BooksMaster,

Имхо, это быстрее попробовать.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174823
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
BIT_COUNT(77777 & POW(2, 5))
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174826
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
Код: sql
1.
BIT_COUNT(77777 & POW(2, 5))

BIT_COUNT не нужен.
Вот так вполне сработает:
Код: sql
1.
select * from mytable where flags & POW(2, 5)
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174904
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftвадя
Код: sql
1.
BIT_COUNT(77777 & POW(2, 5))

BIT_COUNT не нужен.
Вот так вполне сработает:
Код: sql
1.
select * from mytable where flags & POW(2, 5)


т.е. всё что больше 0 - true, 0=false ?
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39174921
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадят.е. всё что больше 0 - true, 0=false ?
Код: sql
1.
2.
3.
4.
     IF NULL THEN NULL
ELSE IF 0    THEN FALSE
ELSE         THEN TRUE
END IF
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39175033
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftBooksMaster,

BIT_AND()
Но будет полный перебор таблицы с вытекающим быстродействием.
но мы же знаем, что если определенный бит установлен, то число точно больше чем N^2, а значит можно добавить условие и будет работать индекс.
Иногда. Скорее всего не очень поможет :)
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39175040
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwindно мы же знаем, что если определенный бит установлен, то число точно больше чем N^2, а значит можно добавить условие и будет работать индекс.Это возможно только для самого старшего бита из используемых.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39175093
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старшего бита МАНТИССЫ. Самый старший - может оказаться знаковым...
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39175110
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСтаршего бита МАНТИССЫ. Самый старший - может оказаться знаковым...
Может. Но не окажется если объявить как unsigned.
Очевидно, что и порядок упаковки этих флажков надо выбирать с умыслом.
Но если речь всего лишь о паре тысяч записей, может не надо ?
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39175116
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netwindМожет. Но не окажется если объявить как unsigned.
Угу.

Есть и ещё одна опасность. Неиспользуемые биты обычно игнорируются, и к ним не применяется принудительный сброс. Что может при попытке арифметических, а не логических, операторов, дать неприятный эффект. Да и приведение типов по умолчанию обычно интерпретирует старший бит именно как знаковый.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39175145
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСамый старший - может оказаться знаковым...Да, условие проверки для самого старшего придется писать иначе.
Например, flags < 0, если нужно найти записи с установленным самым старшим битом.

Тут подразумевается, что используются целочисленные типы данных семейства int.
...
Рейтинг: 0 / 0
получить определенный бит числа
    #39175176
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
использовать BIGINT и не париться со знаковым разрядом
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / получить определенный бит числа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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