Преобразование типов операндов в выражениях. Простейший способ - сдвигать беззнаковое целое вправо, пока оно не станет равным 0

Простейший способ - сдвигать беззнаковое целое вправо, пока оно не станет равным 0. Количество сдвигов и есть его разрядность.

//Листинг 12.2

#include <iostream>

using namespace std;

 

//Определение разрядности числа

int wordlen(unsigned vv)

{ int i;

for(i=0; vv!=0; i ++, vv>>=1);

return i;}

 

int main()

{ unsigned u=0xEF145;

cout<<wordlen(u)<<'\n';

return 0; }

 

Результат выполнения программы:

Подсчет количества единичных битов

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

//Листинг 12.3

#include <iostream>

using namespace std;

//Подсчет количества единичных битов

int what_is_1(unsigned n)

{ int i,s;

for(i = 0,s=0; i < sizeof(int)*8; i++)

{ if (n & 1) s++; n>>=1; } // Проверить младший бит и сдвинуть

return s; }

int main(){

unsigned a=0xF5;

cout<<what_is_1(a)<<'\n';

return 0;}

Результаты выполнения программы:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: