Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Количество установленных битов в Int  [new]
__Avenger__
Member

Откуда:
Сообщений: 1984
Добрый вечер!

Подскажите, как можно подсчитать количество установленных битов в числе (Integer)? На ум приходит только создать функцию, в которой каждому числу сопоставить число установленных бит.

Какие будут еще варианты?
1 ноя 12, 23:11    [13411481]     Ответить | Цитировать Сообщить модератору
 Re: Количество установленных битов в Int  [new]
qwerty112
Guest
__Avenger__
Добрый вечер!

Подскажите, как можно подсчитать количество установленных битов в числе (Integer)? На ум приходит только создать функцию, в которой каждому числу сопоставить число установленных бит.

Какие будут еще варианты?

declare @i tinyint
set @i = 255
select 
(@i & 256) / 256 +
(@i & 128) / 128 +
(@i & 64) / 64 +
(@i & 32) / 32 +
(@i & 16) / 16 +
(@i & 8) / 8 +
(@i & 4) / 4 +
(@i & 2) / 2 +
(@i & 1)  
1 ноя 12, 23:28    [13411528]     Ответить | Цитировать Сообщить модератору
 Re: Количество установленных битов в Int  [new]
qwerty112
Guest
qwerty112
declare @i tinyint
set @i = 255
select 
(@i & 256) / 256 +
(@i & 128) / 128 +
(@i & 64) / 64 +
(@i & 32) / 32 +
(@i & 16) / 16 +
(@i & 8) / 8 +
(@i & 4) / 4 +
(@i & 2) / 2 +
(@i & 1)  

это воспринимать как "заготовку" для int :))
1 ноя 12, 23:34    [13411551]     Ответить | Цитировать Сообщить модератору
 Re: Количество установленных битов в Int  [new]
aleks2
Guest
declare @bits table ([bit] int not null primary key clustered)
insert @bits 
select 1
union all
select 2*2
union all
select 2*2*2
union all
select 2*2*2*2
union all
select 2*2*2*2*2
union all
select 2*2*2*2*2*2
union all
select 2*2*2*2*2*2*2

declare @i int = 1001;
select sum(cast(cast(@i&[bit] as bit) as int)) from @bits
2 ноя 12, 17:48    [13416203]     Ответить | Цитировать Сообщить модератору
 Re: Количество установленных битов в Int  [new]
select 2
Guest
aleks2
declare @bits table ([bit] int not null primary key clustered)
insert @bits 
select 1
union all
select 2*2
union all
select 2*2*2
union all
select 2*2*2*2
union all
select 2*2*2*2*2
union all
select 2*2*2*2*2*2
union all
select 2*2*2*2*2*2*2

declare @i int = 1001;
select sum(cast(cast(@i&[bit] as bit) as int)) from @bits


select 2 пропустил
2 ноя 12, 18:05    [13416325]     Ответить | Цитировать Сообщить модератору
 Re: Количество установленных битов в Int  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive
2 ноя 12, 20:40    [13416781]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить