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

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

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

Проясните код. Побитовое увелечение/уменьшение на 1 - C++

31.01.2013, 00:56. Просмотров 545. Ответов 0
Метки нет (Все метки)

Вот пример кода. Вы можете объяснить мне как он работает.
Я понимаю, что 16 это 10000 в двоичной системе.
Код легкий, но я не могу понять как происходит увеличение/уменьшение.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// lab 2.7.1v.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
// побитовое увеличение на 1
int a = 16;
int res1;
int i = 0;
res1 = a;
int c;
c = (a&(1<<i))>>i;
while ((c!=0)&&(i<31))
{
    res1 = (res1^(1<<i));
    i++;
    c = (a&(1<<i))>>i;
}
res1 = (res1^(1<<i));
// побитовое уменьшение на 1
a = 60; // новое значение а
int res2;
int d;
i = 0; // обнулим счетчик
res2 = a;
d = (a&(1<<i))>>i;
while ((d!=1)&&(i<31))
{
    res2 = (res2^(1<<i));
    i++;
    d = (a&(1<<i))>>i;
}
res2 = (res2^(1<<i));
 
//побитовое сравнение двух чисел, проверка на ==
int a1 = 100;
int a2 = 100;
int c1;
int c2;
int res3 = 0;
i = 31; //счетчик = 31
while ((i >= 0) && (res3 == 0)) //рабочает пока не пройдем 0 бит, или проверим условие ==
{
c1 = (a1&(1<<i))>>i;
c2 = (a2&(1<<i))>>i;
i--;
res3 = c1-c2;// если res3 = 0, числа равные; res3 = 1, с1 - больше с2, res3 = -1, с2 - больше с1 
}
 
    return 0;
}
Добавлено через 7 часов 28 минут
Я понял. Детально проработаю эту тему, потом самостоятельно напишу пояснение данных побитовых операций.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2013, 00:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проясните код. Побитовое увелечение/уменьшение на 1 (C++):

Проясните освобождение памяти - C++
Допустим есть такой код: typedef struct COORDINATE { QVector&lt;int&gt; x; QVector&lt;int&gt; y; QVector&lt;int&gt; z; } Coordinate; ...

Проясните строчку из стандарта - C++
Как бэ приобщаюсь к стандарту. Вот читал про static переменные и вот 6.7.5.3 Function declarators (including prototypes) В...

проясните вопрос в строках - C++
вот программа с объявлениями строк как тип стринг и как массив #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;string&quot; ...

Проясните ситуацию с пространствами имен - C++
Имеется программа, состоящая из двух файлов, например file1.cpp и file2.cpp Написав только в одном из них после директив препроцессора: ...

Увелечение размера динамического массива - C++
Добрый день! Итак, допустим есть массив: char *str = new char; Задача следующая: увеличить размер массива на 1 (то есть до 5...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2013, 00:56
Привет! Вот еще темы с ответами:

побитовое увеличение - C++
Здравствуйте уважаемые пользователи. Это моя первая тема. Собственно суда я пришел за помощью. Так вот. Как побитово увеличить любое...

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

Побитовое замещение - C++
Не могу что-то догнать. Есть int 0x 00 00 00 00 Как наиболее простым способом заместить одну из пар 4 бит другой? set( 1, 0x56 ) ...

Побитовое сравнение - C++
Дан массив с десятичными числами, как сравнить (2ой,3ий,4ый и т.д.) бит 7 элемента с 1 элементом.


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

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

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