SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.01.2011 19:35:49

Retrill
Участник
Зарегистрирован: 09.10.2010
Сообщений: 21

Побитовое отрицание

Никак не могу разобраться. Пусть у меня объявлено поле BIT(4). Записываю туда значение "0101", что соответствует числу 5. Как мне извлечь его отрицание, то бишь "1010", что соответствует числу 10?
Вот такие варианты делают не то, что нужно:


SELECT NOT(field+0) FROM table;
SELECT !(field+0) FROM table;
SELECT ~(field+0) FROM table;
 


Как правильно написать в запросе то, что я хочу?

Неактивен

 

#2 12.01.2011 21:33:29

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Побитовое отрицание

Тильда вполне хорошо работает. Только Вы интерпретируете неправильно.

Код:

[silentia] root test > select b+0 from b;
+------+
| b+0  |
+------+
|    5 |
+------+
1 row in set (0.00 sec)

[silentia] root test > select ~b + 0 from b;
+----------------------+
| ~b + 0               |
+----------------------+
| 18446744073709551610 |
+----------------------+
1 row in set (0.00 sec)

[silentia] root test > select ~b & 15 + 0 from b;
+-------------+
| ~b & 15 + 0 |
+-------------+
|          10 |
+-------------+
1 row in set (0.00 sec)

Неактивен

 

#3 12.01.2011 23:00:13

Retrill
Участник
Зарегистрирован: 09.10.2010
Сообщений: 21

Re: Побитовое отрицание

Т.е. даже если поле объявлено как 4-битное, оно все равно воспринимается как 64-битное?.. Какое-то странное поведение...

Отредактированно Retrill (12.01.2011 23:05:11)

Неактивен

 

#4 13.01.2011 03:12:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Побитовое отрицание

В MySQL все вычисления производятся в 64 битах (и это еще один повод не
ставить его на 32-битные ОС, кстати).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson