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

Побитовые операции, работа с шестнадцатеричной записью - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.90
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
27.03.2011, 21:21     Побитовые операции, работа с шестнадцатеричной записью #1
Добрый вечер. Цель лабы обработка числовой информации, работа с побитовыми операциями.
Сама задача: Дано длинное целое неотрицательное число. Заменить каждую цифру F в шестнадцатеричной записи этого числа цифрой 7.
Что прошу: собственно помощь в выполнении, алгоритм или кусок кода - кто чем поможет.
PS: функции использовать нельзя..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2011, 21:21     Побитовые операции, работа с шестнадцатеричной записью
Посмотрите здесь:

побитовые операции C++
Побитовые операции C++
C++ Побитовые операции
C++ Побитовые операции
работа с записью числа в шестнадцатеричной сс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
28.03.2011, 09:24     Побитовые операции, работа с шестнадцатеричной записью #2
C
1
2
3
4
5
unsigned int num= 0x.....;
 
if ( (num&0x0000000F) == 0x0000000F ) { num&= 0xFFFFFFF7; }
 
/* остальные 7 проверок сам напиши */
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
28.03.2011, 21:23  [ТС]     Побитовые операции, работа с шестнадцатеричной записью #3
odip, человек вводит число в десятичном представлении.. в этом проблема.
И как
C++
1
(num&0x0000000F) == 0x0000000F
Прокомментируйте пожалуйста алгоритм, не понял..

Добавлено через 10 часов 44 минуты
какие 7 проверок?
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
28.03.2011, 21:46     Побитовые операции, работа с шестнадцатеричной записью #4
ну, возможно, следует в цикле переводить в 16-ю систему счисления, и параллельно строить выходное число, заменяя F на 7
а с побитовыми операциями, начинать с мл. разряда и рассматривать по 4 бита, если они совпадают с 1111 то менять на 0111
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
28.03.2011, 22:20  [ТС]     Побитовые операции, работа с шестнадцатеричной записью #5
Цитата Сообщение от eXXXXXXXXXXX Посмотреть сообщение
с 1111 то менять на 0111
вы сейчас предложили мне заменить десятичную на 16 а результат сравнивать в двоичной..
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
28.03.2011, 22:24     Побитовые операции, работа с шестнадцатеричной записью #6
Какая в пень разница, в каком представлении вводят число. В машине оно всегда хранится в двоичном виде и все операции над числами машина проводит в двоичном представлении

По поводу представления чисел почитай Неочевидные ответы на простые вопросы раздел 8, может ясность какая появится
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
28.03.2011, 22:27  [ТС]     Побитовые операции, работа с шестнадцатеричной записью #7
Цитата Сообщение от Evg Посмотреть сообщение
может ясность какая появится
вы мне это уже писали)
проблема что в данном контексте задачи - все же мы вводим в одной сс а работаем над ней в другой.
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
28.03.2011, 22:33     Побитовые операции, работа с шестнадцатеричной записью #8
например, число 241(F1 в 16-ой) хранится в виде посл-ти битов 11110001. Вы можете применять побитовые операции к этому числу, и получать необходимое
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
28.03.2011, 22:58     Побитовые операции, работа с шестнадцатеричной записью #9
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
проблема что в данном контексте задачи - все же мы вводим в одной сс а работаем над ней в другой
Неправильно. Ты можешь ввести "17", предполлагая десятичную запись. Можешь ввести "11", предполагая 16-ричную запись. Но в обоих случаях ты введёшь одну и ту же величину и в памяти машина она будет храниться в виде "10001" (в двоичном виде). Ты можешь написать

C
1
2
3
4
int x, y, z;
x = 17;
y = 7;
z = x & y;
или

C
1
2
3
4
int x, y, z;
x = 0x11;
y = 0x7;
z = x & y;
на результат это никоим боком не повлияет
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
28.03.2011, 23:15     Побитовые операции, работа с шестнадцатеричной записью #10
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
    
int main(void){
    int n;
    
    while ( printf("Number: ") && scanf("%i", &n) == 1 )
        printf("Before: %#x\nAfter:  %#x\n", n, n & ~0x88888888);
    
    return 0;
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
28.03.2011, 23:27     Побитовые операции, работа с шестнадцатеричной записью #11
easybudda, а "~0x88888888" вместо "0x77777777" - это чтобы враги не догадались?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
28.03.2011, 23:32     Побитовые операции, работа с шестнадцатеричной записью #12
Evg, ага... мне так нагляднее показалось. семь - это пятнадцать без восьми...
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
29.03.2011, 01:30  [ТС]     Побитовые операции, работа с шестнадцатеричной записью #13
Цитата Сообщение от easybudda Посмотреть сообщение
мне так нагляднее показалось
я с вашего кода дурею)) точно как для врагов - ни че не понятно)
подскажите как это будет выглядеть на с++
ну или хотяб пару комментариев
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.03.2011, 01:38     Побитовые операции, работа с шестнадцатеричной записью #14
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
ну или хотяб пару комментариев
Это на одну-то строчку? На самом деле даже и не знаю, что там комментировать... Вроде бы
Цитата Сообщение от easybudda Посмотреть сообщение
семь - это пятнадцать без восьми.
всё сказано... Суть - нужно обнулить каждый четвёртый бит.
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
29.03.2011, 01:40  [ТС]     Побитовые операции, работа с шестнадцатеричной записью #15
Цитата Сообщение от easybudda Посмотреть сообщение
что там комментировать
я не понимаю кода "с" ..
мне не понятно что делают ("%i", &n) == 1 )
мне не понятно что это - %#x\nAfter: %#x\n", n,

какие то запятые.. хоть бери и синтаксис си учи..
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.03.2011, 01:52     Побитовые операции, работа с шестнадцатеричной записью #16
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
я не понимаю кода "с"
да ёпэрэсэтэ
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <iomanip>
 
int main(){
    int n;
    
    while ( std::cout << "Number: " && std::cin >> n )
        std::cout << "Before: " << std::hex << n << "\nAfter:  " << std::hex << ( n & 0x77777777 ) << std::endl;
    
    return 0;
}
одна беда - код неправильный, некоторые числа по ошибке корёжит...
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
29.03.2011, 02:00  [ТС]     Побитовые операции, работа с шестнадцатеричной записью #17
Цитата Сообщение от easybudda Посмотреть сообщение
некоторые числа по ошибке корёжит
дайте пример, если не сложно... надо думать как поправить
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
29.03.2011, 02:26     Побитовые операции, работа с шестнадцатеричной записью #18
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
Цель лабы
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
я не понимаю кода "с"
как же до лаб то допустили
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
29.03.2011, 11:10     Побитовые операции, работа с шестнадцатеричной записью #19
odip, человек вводит число в десятичном представлении.. в этом проблема.
Это проблема существует только в твоей голове
Нет никакой разницы в какой системе вводить число
Число - оно вообще не зависит от системы счисления !

Добавлено через 4 минуты
easybudda в обоих примерах неправильно решил задачу
Задача состоит в том что если цифра F, то заменить ее на 7
А приведенный код например заменяет цифры 8 на 0

какие 7 проверок?
считаем что unsigned int занимает 4 байта
Итого в числе будет 8 16-ричных цифр
Значит нужно 8 повторить код замены, который я написал в посте #2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2011, 14:10     Побитовые операции, работа с шестнадцатеричной записью
Еще ссылки по теме:

C++ Побитовые операции
C++ побитовые операции
Определить, является ли текст шестнадцатеричной записью числа, кратного 5 (Pascal -> C++) C++

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

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
29.03.2011, 14:10     Побитовые операции, работа с шестнадцатеричной записью #20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
 
int main(int argc, char* argv[])
{
   int number, mask;
 
   cin >> number;
   for (int i = 0; i < sizeof(int)*2; i++)
   {
      if (((number>>i*4)&0xf) == 0xf)
      {
         mask = 0x8<<i*4;
         number &= ~mask;
      }
   }
   cout << number << endl;
   system("pause");
   return 0;
}
Yandex
Объявления
29.03.2011, 14:10     Побитовые операции, работа с шестнадцатеричной записью
Ответ Создать тему
Опции темы

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