Наверно детский вопрос, но всё же ...
как сделать на С ? получаю какое либо число ... скажем 273, требуется узнать , каие биты в представлении данного числа в двоичном виде, установлены в 1.
>Наверно детский вопрос, но всё же ...
>как сделать на С ? получаю какое либо число ... скажем 273,
>требуется узнать , каие биты в представлении данного числа в двоичном
>виде, установлены в 1.Как вариант:
unsigned int temp = 273;
int nbit = 0;
while (temp != 0) {
if ((temp & 1) != 0) {
printf("Бит %d установлен в 1\n", nbit);
}
nbit ++;
temp >>= 1;
}
>Наверно детский вопрос, но всё же ...
>как сделать на С ? получаю какое либо число ... скажем 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);Выводит порядковые номера единичных битов, начиная с нулевого.
>>Наверно детский вопрос, но всё же ...
>>как сделать на С ? получаю какое либо число ... скажем 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};
а нужно получить число десятичное?
>>>Наверно детский вопрос, но всё же ...
>>>как сделать на С ? получаю какое либо число ... скажем 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};
>а нужно получить число десятичное?
А самому написать? Такие вещи делаются элементарно, нужно только знать принципы перевода из десятично в двоичную и все. Поищи по интернету, это не проблема.
>>>>Наверно детский вопрос, но всё же ...
>>>>как сделать на С ? получаю какое либо число ... скажем 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};
>>а нужно получить число десятичное?
>
>
>А самому написать? Такие вещи делаются элементарно, нужно только знать принципы перевода
>из десятично в двоичную и все. Поищи по интернету, это не
>проблема.буду рыть ...
>> А как насчёт обратного интрепретирования?
>> Т.е. имеем массив
>> 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;
}