Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alekopi
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 8
#1

Поразрядные операторы,операторы сдвига - C++

11.04.2013, 22:47. Просмотров 357. Ответов 1
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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 происходит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2013, 22:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поразрядные операторы,операторы сдвига (C++):

Поразрядные операторы сдвига - C++
Всем хорошо известно, что поразрядные операторы сдвига &gt;&gt; и &lt;&lt; сдвигают все биты переменной вправо или влево. Во время сдвига битов в один...

Поразрядные операторы - C++
Здравствуйте, объясните мне практическую ценность поразрядных операторов, не могу понять, зачем они нужны.. заранее спасибо.

Поразрядные операторы + небольшая шифропрограммка - C++
Начинаю изучать поразрядные операторы (и, или, исключающее или, не). В принципе все понятно, но при написании небольшой (детской)...

С++.Операторы в С++: условные операторы, операторы break и continue - C++
Выяснить, пересекаются ли параболы у=аx2+bx+с и у=dx2+ex + f. При положительном ответе найти точки пересечения.

Определить и вывести количество дней между двумя датами (логические операторы и операторы ветвлений) - C++
Задачка Пользователь вводит две даты (день, месяц, год в виде целых чисел). Необходимо определить и вывести количество дней между этими...

«Языки и технологии программирования» «Операторы цикла. Условные операторы» - C++
Не получается сделать что бы программа выводила все значения в промежутке, она выводит только одно. условия | ((z^3)+sin...

1
ValeryS
Модератор
6786 / 5194 / 497
Регистрация: 14.02.2011
Сообщений: 17,432
11.04.2013, 23:00 #2
Цитата Сообщение от alekopi Посмотреть сообщение
for(b=0;x!=0;x>>=1)
крутить пока x!=0
делить x на 2 x>>=1
Цитата Сообщение от alekopi Посмотреть сообщение
if(x&01)
проверить есть ли младший бит
если есть то
Цитата Сообщение от alekopi Посмотреть сообщение
b++;
Добавлено через 4 минуты
Цитата Сообщение от alekopi Посмотреть сообщение
8 бит т.е. там как то цикл for пробегает всегда 8 раз ,
кто тебе это сказал?
это алгоритм приведения десятичного числа в двоичное методом деления
при 3 (0000 0000 0000 0000 0000 0000 0000 0011) цикл покрутится 2 раза
первый проход 0000 0011
if(x&01) 0000 0001 прибавляем b++;
второй проход 3/2=1
0000 0001
if(x&01) 0000 0001 прибавляем b++;
третий проход
1/2=0
x!=0; ложь выходим из цикла
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 23:00
Привет! Вот еще темы с ответами:

Операторы присваивания, ввода- вывода. Операторы ветвления, выбора - C++
Даны два ненулевых числа. Найти их сумму, разность, произведение, частное, остаток и целую часть от деления. Добавлено через 8 часов...

Операторы языка С++: операторы цикла (исправьте программу) - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; using namespace std; int main() { int a,n; float y,x; cout&lt;&lt;...

Операторы ветвления и операторы передачи управления - C++
1. Вычислить значения функции F при вещественных a, b, c, x, вводимых с клавиатуры. 2. Составить программу, которая печатает...

Операторы цикла и операторы передачи управления - C++
Вычислить сумму ряда S с погрешностью эпсилон, задаваемой с клавиатуры. Вывести количество итераций, сделанных при вычислении. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru