URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5372
[ Назад ]

Исходное сообщение
"определить установленные биты"

Отправлено greenetc , 27-Апр-06 19:54 
Наверно детский вопрос, но всё же ...
как сделать на С ? получаю какое либо число ... скажем 273, требуется узнать , каие биты в представлении данного числа в двоичном виде, установлены в 1.

Содержание

Сообщения в этом обсуждении
"определить установленные биты"
Отправлено gyn61 , 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;
}


"определить установленные биты"
Отправлено Bob , 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);

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


"определить установленные биты"
Отправлено greenetc , 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};
а нужно получить число десятичное?


"определить установленные биты"
Отправлено SSuslov , 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};
>а нужно получить число десятичное?


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


"определить установленные биты"
Отправлено greenetc , 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};
>>а нужно получить число десятичное?
>
>
>А самому написать? Такие вещи делаются элементарно, нужно только знать принципы перевода
>из десятично в двоичную и все. Поищи по интернету, это не
>проблема.

буду рыть ...


"определить установленные биты"
Отправлено Skiff , 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;
}