Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.03.2011, 16:11     Побитовые операции, работа с шестнадцатеричной записью #21
Попробуйте как вариант задачи Вашей.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 // нa будущее приучайтесь битовые операции выполнять в положительных числах unsigned
 typedef unsigned int  uint;
 
 uint num = 0xF345FAEF;  // пример дано
 uint set  = 0x7;   // заменить на новую тетраду
 uint cur  = 0xF;  // найти эту тетраду
 
 uint cbit  = 0x0;
 uint cnt   = 0;
 for( ; num != 0x0; num >>= 4, cnt += 4) {  // это 4-ка тетрада по ней выбиваем
         if(! (num & 0xF ^ cur)) 
       cbit |= (0xF &  set) << cnt;
        else
       cbit |= (0xF &  num) << cnt;
 }
 // проверка на изменение
 printf("current = %X,  sets = %X\n", 0xF345FAEF, cbit);
Удачи !
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
29.03.2011, 17:38  [ТС]     Побитовые операции, работа с шестнадцатеричной записью #22
ValeryS, ваша ирония тут не к месту. код си и си ++ сильно отличаются.
спасибо за участие, все понятно.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
30.03.2011, 14:18     Побитовые операции, работа с шестнадцатеричной записью #23
Неправильно - number и mask должны быть типа unsigned int
Иначе отрицательные числа фиг знает как сдвигаются

Да и по условию задачи - на вход подается беззнаковое число

Добавлено через 1 минуту
xAtom вот понимает что надо в unsigned int работать

Добавлено через 1 минуту
код си и си ++ сильно отличаются.
Это смотря как применять топор - можно мясо рубить, а может и старушек

В C++ никто не запрещает использовать printf()
Поэтому с минимальными изменениями код C можно использовать как C++
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
30.03.2011, 14:24     Побитовые операции, работа с шестнадцатеричной записью #24
Цитата Сообщение от odip Посмотреть сообщение
Неправильно - number и mask должны быть типа unsigned int
на данную задачу это не влияет
Цитата Сообщение от odip Посмотреть сообщение
Иначе отрицательные числа фиг знает как сдвигаются
очень даже изветсно как сдвигаются
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16844 / 5265 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
30.03.2011, 14:46     Побитовые операции, работа с шестнадцатеричной записью #25
Цитата Сообщение от kazak Посмотреть сообщение
очень даже изветсно как сдвигаются
Сдвиг вправо - он unspecified по части заполнения старших битов. Но поскольку дальше накладывается маска и откидываются старшие биты, то результат операции сдвига вправо и наложения маски оказывается вполне определённым. В данной программе единственное место, которое отработает (или может отработать) неправильно - это "cin >> number" для чисел, которые больше, чем 2^31

А вообще в битовых операциях знаковость критична только для сдвига вправо. Для всех остальных операций пофигу
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
30.03.2011, 15:26     Побитовые операции, работа с шестнадцатеричной записью #26
Цитата Сообщение от Evg Посмотреть сообщение
Сдвиг вправо - он unspecified по части заполнения старших битов.
Это по стандарту?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2011, 15:39     Побитовые операции, работа с шестнадцатеричной записью
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16844 / 5265 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
30.03.2011, 15:39     Побитовые операции, работа с шестнадцатеричной записью #27
Цитата Сообщение от kazak Посмотреть сообщение
Это по стандарту?
Да. Говорится, что он может быть либо логическим, либо арифметическим. Постфактум на всех "нормальных" архитектурах для беззнаковых чисел делается логический сдвиг, для знаковых - арифметический
Yandex
Объявления
30.03.2011, 15:39     Побитовые операции, работа с шестнадцатеричной записью
Ответ Создать тему
Опции темы

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