Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2013, 22:51   #1
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию Поразрядные операторы,операторы сдвига

Код:
#include<iostream>
using namespace std;
int bitcount(unsigned x)
{
	int b;
	for(b=0;x!=0;x>>=1)
		if(x&01)
			b++;
	return b;
}
void main()
{
	int i=3;
	cout<<bitcount(i);
}
я понимаю что выполняет эта функция - считает количество единичных битов в двоичном представлении числа i
Но как это все происходит пошагово в цикле и что там делается в каждом шаге я не понимаю
я не понимаю эти поразрядные операторы - читал в учебниках про них, но все равно не могу представить подробно что в цикле происходит
в байте - 8 бит т.е. там как то цикл for пробегает всегда 8 раз ,но как он там и в каком месте сравнивает единички и нули я не могу понять и почему именно один байт, если во время определения переменной i в каком то месте памяти выделяется 4 байта для хранения встроенного типа данных int а не один
извините за свои корявые изложения мыслей т.к. скорей всего кое-где криво и неправильно выразился в своем сообщении потому-что изучаю Си не больше месяца.
Объясните пожалуйста что в цикле for происходит

Последний раз редактировалось Stilet; 12.04.2013 в 08:24.
alekopoko вне форума Ответить с цитированием
Старый 11.04.2013, 23:40   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Этот цикл не пробегает 8 раз.
Он выполняется, пока число Х не стало равно 0, т.е. в нем больше нет единичных бит.
Код:
for(b = 0; x != 0; x >>= 1)
    b += x & 1;
Так лучше, имхо.

Что же тут происходит:
Обнуляем b
Выполняем цикл, пока X не равен 0
Выполняем тело цикла, а затем сдвигаем число X на 1 бит влево ("выбрасываем" младший бит)

В самом теле цикла:
x & 1 - битовое "И", которое равно 1, если младший бит х равен 1, иначе 0
Таким образом, прибавляем к b 1 или 0
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операторы >>, << absurd_logik Visual C++ 1 14.01.2013 18:26
Операторы ziganurov2011 Паскаль, Turbo Pascal, PascalABC.NET 5 24.07.2011 03:04
С++ (операторы) Мари_Ланвейн Помощь студентам 1 23.12.2010 20:35
Операторы Viconte Помощь студентам 5 01.11.2010 16:34