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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2013, 22:34   #1
Rus5
Пользователь
 
Регистрация: 12.12.2011
Сообщений: 14
По умолчанию С++ побитовые операции

В байтах, содержащих четное количество единичных битов попарно
поменять местами соседние биты

Где допущена ошибка, вроде все как надо, но неправильно выводит. Где ошибка подскажите пожалуйста.

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
int main()
{unsigned a,b=0; int x,n=0,c=0;
cout<<"vvedite chislo ";
cin>>hex>>a;
b=a;
while(b!=0) {b=b/2; c++;}
if (c%8!=0) c=c+8-c%8;//количество бит
x=0;
while (x<c)
{for(int i=x;i<(x+8);i++)
if((a & (1<<i))!=0)//если i-й бит = 1
{n++;}//считаем его
if ((n%2)==0)//проверяем четность количества единичных битов
{for(int i=x;i<(x+8);i=i+2)
if((a & (1<<i))!=0)//если i-й бит = 1
{if((a & (1<<(i+1)))==0)//если соседний бит = 0
{a=a & (~(1<<i));//обнуляем i-й бит
a=a|(1<<(i+1));}//устанавливаем единичный бит
}
else
if((a & (1<<i))==0)//если i-й бит = 1
{if((a & (1<<(i+1)))!=0)//если соседний бит = 0
{a=a & (~(1<<(i+1)));//обнуляем i-й бит
a=a|(1<<i);}//устанавливаем единичный бит
}
}
x=x+8;//переходим к следующему байту
n=0;
}
cout<<hex<<a;
getch();
}
Rus5 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С/С++, ПОБИТОВЫЕ ОПЕРАЦИИ. gopnikdj Помощь студентам 5 25.12.2012 18:29
Си.Побитовые операции Alina111 Visual C++ 6 24.06.2012 20:53
Побитовые операции Unique Паскаль, Turbo Pascal, PascalABC.NET 3 29.08.2010 18:50
Побитовые операции С++ Defa4ka Помощь студентам 4 22.06.2010 14:55
побитовые операции Dimarik Общие вопросы C/C++ 7 16.04.2010 19:27