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

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

Войти
Регистрация
Восстановить пароль
 
lenston
2 / 0 / 1
Регистрация: 12.11.2014
Сообщений: 33
#1

Работа с битами. Чтение переменной по битам - C++

21.11.2014, 00:35. Просмотров 689. Ответов 3
Метки нет (Все метки)

Всем привет.. задача такая:

Есть некое число, находящееся в переменной X в шестнадцатеричной системе счисления..
Необходимо в несколько переменных передать значения каких-то бит этой X

Например..

У нас есть некое число
C
1
unsigned int x=0xF3;
равное в двоичном представлении 11110011

нам необходимо сначала в переменную "a" отправить самый крайний левый бит - это 1
я делаю вот так
C
1
a=x>>7;
после сохранить значения в переменную "b" 3 бита следующие за певрым
я делаю так
C
1
2
x<<=1;  //после этой операции Х = 11100110
b=x>>5;  //равен не 111=7, а равен 15, т.е первый бит остался и получилось ,что в б передалось 1111, что =15
дальше по аналогии нужно снова 1 и 3 бита последовательно.. вот вывод консоли

11110011
1
11100110
15
00110000
30
01100000
243

вот весь код
C
1
void    _dv(int n) // для вывода измененного х
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
void    _dv(int n){                                     // вывод байта в двоичку
    int i=7;char buffer[]="00000000";
    do {int x=n%2;n=n/2; char z;
            if( x<10 )  z='0'+x;
            else        z='A'-10+x;
        buffer[i]=z; i--;
    } while (n>0); printf("%s",buffer);
}
int main(){ 
    unsigned int x=0xF3;
    _dv(x); printf("\n");
    int a,b,c,d;
    a=x>>7;x<<=1;printf(" %i\n",a);_dv(x); printf("\n");        
    b=x>>5;x<<=3;printf(" %i\n",b);_dv(x); printf("\n");
    c=x>>7;x<<=1;printf(" %i\n",c);_dv(x); printf("\n");
    d=x>>5;x<<=3;printf(" %i\n",d);_dv(x); printf("\n");        
}
не могу понять в чем проблема..
должно получаться следующее..
C
1
2
3
4
5
x=0xF3 11110011
a=1    1
b=7     111
c=0        0
d=3         011
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2014, 00:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с битами. Чтение переменной по битам (C++):

Работа с битами И Работа с символьными данными - C++
1. Ввести 8 символов. В символе с наибольшим кодом заменить 5-й бит единицей, а в символе с наименьшим кодом 6-й бит - нулем. Вывести...

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

Работа с битами - C++
Я уже задолбался... :wall: Может мне кто нибудь подскажет как из 00111010 (58) получить 00001010 (10) хотя бы каким методом... код...

Работа с битами - C++
три раза писал но все равно не получается((( 1-)Ввести последовательность из 8 символов. Сравнить 5-й и 6-й биты каждого символа. Если...

Работа с битами. - C++
Здрасте. Дана задача: Определить на сколько в числе А больше значущих битов, что равны единице, чем битов, что равны нулю. Помогите...

Работа с битами - C++
В общем вот локальная проблема: есть int, который выступает в роли сетки нулей и единиц, два примера, разницу между которыми не могу...

3
_Ivana
3178 / 1794 / 153
Регистрация: 01.03.2013
Сообщений: 5,007
Записей в блоге: 2
21.11.2014, 01:56 #2
Цитата Сообщение от lenston Посмотреть сообщение
вывод байта в двоичку
какого байта, когда у тебя инт, да еще и знаковый?
1
nmcf
5353 / 4673 / 1563
Регистрация: 14.04.2014
Сообщений: 18,616
21.11.2014, 09:55 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
void _dv(int n)
{
    char buffer[9];
    buffer[8] = '\0';
    for (int i = 7; i >= 0; --i)
    {
        buffer[i] = '0' + (n & 1);
        n >>= 1;
    }
    printf("%s", buffer);
}
 
int main()
{
    unsigned int x=0xF3;
    _dv(x); printf("\n");
    int a,b,c,d;
    a = x >> 7;
    printf(" %i\n",a);_dv(a); printf("\n");        
    b = (x >> 4) & 7;
    printf(" %i\n",b);_dv(b); printf("\n");
    c = (x >> 3) & 1;
    printf(" %i\n",c);_dv(c); printf("\n");
    d = x & 7;
    printf(" %i\n",d);_dv(d); printf("\n");   
 
 
    system("pause");
    return 0;
}
1
lenston
2 / 0 / 1
Регистрация: 12.11.2014
Сообщений: 33
21.11.2014, 15:04  [ТС] #4
Цитата Сообщение от _Ivana Посмотреть сообщение
какого байта, когда у тебя инт, да еще и знаковый?
точняк блин.. вот так будет работать..

C
1
unsigned char x=0xF3;
Добавлено через 13 минут
Спасибо.. тоже отлично работает..

Цитата Сообщение от nmcf Посмотреть сообщение
a = x >> 7;
* * printf(" %i\n",a);_dv(a); printf("\n"); * * * *
* * b = (x >> 4) & 7;
* * printf(" %i\n",b);_dv(b); printf("\n");
* * c = (x >> 3) & 1;
* * printf(" %i\n",c);_dv(c); printf("\n");
* * d = x & 7;
* * printf(" %i\n",d);_dv(d); printf("\n");
0
21.11.2014, 15:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2014, 15:04
Привет! Вот еще темы с ответами:

Работа с битами. - C++
помогите!! как писать эту на программе с++ Ввести последовательность из 8 символов. Сравнить 5-й и 6-й биты каждого символа. Если они...

Работа с битами - C++
Стоит задача: вывести все двоичные коды чисел от 0 и до 2n-1. Сделать напролом могу(переводить в цикле каждое число в двоичную с-му и...

Работа с битами - C++
Не могу понять, почему не правильно работает программа. Программа зашифровывает строку, выводит, потом расшифровывает и выводит. ...

Работа с битами числа - C++
Извлечь 5 битов числа A, начиная со второго и вставить их в число B, начиная с третьего бита. Нашел код...


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

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

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