The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"определить установленные биты"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"определить установленные биты"  
Сообщение от greenetc (ok) on 27-Апр-06, 19:54 
Наверно детский вопрос, но всё же ...
как сделать на С ? получаю какое либо число ... скажем 273, требуется узнать , каие биты в представлении данного числа в двоичном виде, установлены в 1.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "определить установленные биты"  
Сообщение от gyn61 (??) on 27-Апр-06, 22:01 
>Наверно детский вопрос, но всё же ...
>как сделать на С ? получаю какое либо число ... скажем 273,
>требуется узнать , каие биты в представлении данного числа в двоичном
>виде, установлены в 1.

Как вариант:

unsigned int temp = 273;
int nbit = 0;
while (temp != 0) {
  if ((temp & 1) != 0) {
    printf("Бит %d установлен в 1\n", nbit);
  }
  nbit ++;
  temp >>= 1;
}

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "определить установленные биты"  
Сообщение от Bob (??) on 27-Апр-06, 22:08 
>Наверно детский вопрос, но всё же ...
>как сделать на С ? получаю какое либо число ... скажем 273,
>требуется узнать , каие биты в представлении данного числа в двоичном
>виде, установлены в 1.


Например, вот так:

    int i;
    unsigned char n = 8;
    for(i = 0; i < sizeof(unsigned char) * 8; i++) if(n & (1 << i)) printf("%d\n", i);

Выводит порядковые номера единичных битов, начиная с нулевого.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "определить установленные биты"  
Сообщение от greenetc (ok) on 28-Апр-06, 13:25 
>>Наверно детский вопрос, но всё же ...
>>как сделать на С ? получаю какое либо число ... скажем 273,
>>требуется узнать , каие биты в представлении данного числа в двоичном
>>виде, установлены в 1.
>
>
>Например, вот так:
>
>    int i;
>    unsigned char n = 8;
>    for(i = 0; i < sizeof(unsigned char) *
>8; i++) if(n & (1 << i)) printf("%d\n", i);
>
>Выводит порядковые номера единичных битов, начиная с нулевого.


спасибо всем ... то что надо ..
А как насчёт обратного интрепретирования?
Т.е. имеем массив
int i[16]={1,1,0,1,0,0,0,1,1,1,1,0,1,0,0,0};
а нужно получить число десятичное?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "определить установленные биты"  
Сообщение от SSuslov (ok) on 28-Апр-06, 13:57 
>>>Наверно детский вопрос, но всё же ...
>>>как сделать на С ? получаю какое либо число ... скажем 273,
>>>требуется узнать , каие биты в представлении данного числа в двоичном
>>>виде, установлены в 1.
>>
>>
>>Например, вот так:
>>
>>    int i;
>>    unsigned char n = 8;
>>    for(i = 0; i < sizeof(unsigned char) *
>>8; i++) if(n & (1 << i)) printf("%d\n", i);
>>
>>Выводит порядковые номера единичных битов, начиная с нулевого.
>
>
>спасибо всем ... то что надо ..
>А как насчёт обратного интрепретирования?
>Т.е. имеем массив
>int i[16]={1,1,0,1,0,0,0,1,1,1,1,0,1,0,0,0};
>а нужно получить число десятичное?


А самому написать? Такие вещи делаются элементарно, нужно только знать принципы перевода из десятично в двоичную и все. Поищи по интернету, это не проблема.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "определить установленные биты"  
Сообщение от greenetc (ok) on 28-Апр-06, 14:09 
>>>>Наверно детский вопрос, но всё же ...
>>>>как сделать на С ? получаю какое либо число ... скажем 273,
>>>>требуется узнать , каие биты в представлении данного числа в двоичном
>>>>виде, установлены в 1.
>>>
>>>
>>>Например, вот так:
>>>
>>>    int i;
>>>    unsigned char n = 8;
>>>    for(i = 0; i < sizeof(unsigned char) *
>>>8; i++) if(n & (1 << i)) printf("%d\n", i);
>>>
>>>Выводит порядковые номера единичных битов, начиная с нулевого.
>>
>>
>>спасибо всем ... то что надо ..
>>А как насчёт обратного интрепретирования?
>>Т.е. имеем массив
>>int i[16]={1,1,0,1,0,0,0,1,1,1,1,0,1,0,0,0};
>>а нужно получить число десятичное?
>
>
>А самому написать? Такие вещи делаются элементарно, нужно только знать принципы перевода
>из десятично в двоичную и все. Поищи по интернету, это не
>проблема.

буду рыть ...

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "определить установленные биты"  
Сообщение от Skiff (??) on 02-Май-06, 03:40 
>> А как насчёт обратного интрепретирования?
>> Т.е. имеем массив
>> int i[16]={1,1,0,1,0,0,0,1,1,1,1,0,1,0,0,0};
>> а нужно получить число десятичное?

int bin2dec(int bit_array[], unsigned nbits)
{
    int dec = 0;
    
    while (nbits--)
    {
        if (*bit_array++)
            dec |= 1 << nbits;
    }
    
    return dec;
}

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру