Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Битовые манипуляции  [new]
БитХ
Guest
Люди, подскажите, как получить результат?
Есть поле int, хранит разные состояния, которые устанавливаются битиками.
К примеру поле имеет значение 7 (111 в двоичной). Передаем параметр 2 (10 в двоичной).
Как получить 6 (110 в двоичной).
т.е.: 111 (операции) 10 = 110

Тупой, однако:(
29 окт 09, 10:50    [7854107]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
Glory
Member

Откуда:
Сообщений: 104760
BOL - Bitwise Operators
29 окт 09, 10:54    [7854154]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
БитХ
Guest
Glory
BOL - Bitwise Operators


Так яж и говорю тупой... Не могу из четырех предоставленных операций сотворить чудо...
Или, кроме как попбитово каждый операнд сравнивать, нет альтернативы?
29 окт 09, 11:09    [7854352]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
Glory
Member

Откуда:
Сообщений: 104760
БитХ
Glory
BOL - Bitwise Operators


Так яж и говорю тупой... Не могу из четырех предоставленных операций сотворить чудо...
Или, кроме как попбитово каждый операнд сравнивать, нет альтернативы?

Ну так объясните, по какому алгоритму из 111 и 010 получается 110 ? Почему из первых 1 и 0 получается 1 а из последних 1 и 0 получается 0 ?
29 окт 09, 11:13    [7854406]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Передаем параметр 2 (10 в двоичной).

010 если уж на то пошло. почему, тогда, результат 110 должен получиться?


Posted via ActualForum NNTP Server 1.4

29 окт 09, 11:15    [7854419]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
БитХ
Guest
Изначальное состояние поля 111. в процедуру передаеться параметр 10. Это значит, что первый бит (спарва нелево) нужно выключить, второй включить.
Можно побитово сравнить.
10 & 1 = 0? & 111 & 1 =? 1 - тогда 111 ^ 1
. Это для 3-4 битиков нормально, а если их дохрена?
29 окт 09, 11:25    [7854516]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
БитХ
Guest
БитХ
Изначальное состояние поля 111. в процедуру передаеться параметр 10. Это значит, что первый бит (спарва нелево) нужно выключить, второй включить.
Можно побитово сравнить.
(10 & 1 = 0?) & (111 & 1 = 1?) - тогда 111 ^ 1
. Это для 3-4 битиков нормально, а если их дохрена?
29 окт 09, 11:27    [7854528]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
Glory
Member

Откуда:
Сообщений: 104760
БитХ
Изначальное состояние поля 111. в процедуру передаеться параметр 10. Это значит, что первый бит (спарва нелево) нужно выключить, второй включить.
Можно побитово сравнить.
10 & 1 = 0? & 111 & 1 =? 1 - тогда 111 ^ 1
. Это для 3-4 битиков нормально, а если их дохрена?

Все параметры битовых сравнение имеют одинаковую разрядность
Сравниваются не 111 и 10,а 111 и 010
29 окт 09, 11:28    [7854540]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
БитХ
Guest
Glory
БитХ
Изначальное состояние поля 111. в процедуру передаеться параметр 10. Это значит, что первый бит (спарва нелево) нужно выключить, второй включить.
Можно побитово сравнить.
10 & 1 = 0? & 111 & 1 =? 1 - тогда 111 ^ 1
. Это для 3-4 битиков нормально, а если их дохрена?

Все параметры битовых сравнение имеют одинаковую разрядность
Сравниваются не 111 и 10,а 111 и 010


Тогда в данном случае (в этой процедуре) третий бит не нужно трогать
29 окт 09, 11:36    [7854627]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
Glory
Member

Откуда:
Сообщений: 104760
БитХ
Glory
БитХ
Изначальное состояние поля 111. в процедуру передаеться параметр 10. Это значит, что первый бит (спарва нелево) нужно выключить, второй включить.
Можно побитово сравнить.
10 & 1 = 0? & 111 & 1 =? 1 - тогда 111 ^ 1
. Это для 3-4 битиков нормально, а если их дохрена?

Все параметры битовых сравнение имеют одинаковую разрядность
Сравниваются не 111 и 10,а 111 и 010


Тогда в данном случае (в этой процедуре) третий бит не нужно трогать

И откуда это будет известно серверу и вам ?
29 окт 09, 11:38    [7854645]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Тогда в данном случае (в этой процедуре) третий бит не нужно трогать

почему не надо-то? как вы собираетесь отличать 10 от 010?

Posted via ActualForum NNTP Server 1.4

29 окт 09, 11:41    [7854677]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
БитХ
Тогда в данном случае (в этой процедуре) третий бит не нужно трогать
Полностью алгоритм написать не возьмусь
Но моя телепатия мне почему-то говорит, что Вам было бы полезно следующее:
select number, cast(log(number) / log(2) as int) + 1
  from master..spt_values
 where type = 'P'
   and number > 0
 order by number
29 окт 09, 11:46    [7854713]     Ответить | Цитировать Сообщить модератору
 Re: Битовые манипуляции  [new]
БитХ
Guest
daw

> Тогда в данном случае (в этой процедуре) третий бит не нужно трогать

почему не надо-то? как вы собираетесь отличать 10 от 010?


1) Так эта процедура меняет только первые 2 бита.
2) 102 - это 210, это передается в процедуру, которая может менять только 1ый и 2ой бит; в поле ттекущее значение 1112 или 710.

Ну не суть. Сделаю по длинному - буду каждый бит проверять
29 окт 09, 11:52    [7854776]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить