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

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

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

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

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

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

BIT_COUNT не нужен.
Вот так вполне сработает:
Код: sql
1.
select * from mytable where flags & POW(2, 5)
...
Рейтинг: 0 / 0
19.02.2016, 07:54
    #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
19.02.2016, 09:03
    #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
19.02.2016, 11:01
    #39175033
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить определенный бит числа
miksoftBooksMaster,

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

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

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


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