Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
alekopi
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 8
11.04.2013, 22:47     Поразрядные операторы,операторы сдвига #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 происходит
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2013, 22:47     Поразрядные операторы,операторы сдвига
Посмотрите здесь:

C++ Операторы принятия решения и операторы цикла.
Поразрядные операторы C++
Условные операторы.Операторы цикла C++
Поразрядные операторы сдвига C++
C++ Переписать символы с входящего рядка в выходящий, меняя операторы языка паскаль на операторы языка С++ := на =, = на ==, # на !=
Операторы ветвления и операторы передачи управления C++
C++ Операторы цикла и операторы передачи управления
Операторы языка С++: операторы цикла (исправьте программу) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,039
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; ложь выходим из цикла
Yandex
Объявления
11.04.2013, 23:00     Поразрядные операторы,операторы сдвига
Ответ Создать тему
Опции темы

Текущее время: 18:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru