Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.90
IIIa66uMEM6eP
заставил Бендера
445 / 301 / 16
Регистрация: 05.12.2010
Сообщений: 1,662
Записей в блоге: 6
#1

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

27.03.2011, 21:21. Просмотров 3141. Ответов 26
Метки нет (Все метки)

Добрый вечер. Цель лабы обработка числовой информации, работа с побитовыми операциями.
Сама задача: Дано длинное целое неотрицательное число. Заменить каждую цифру F в шестнадцатеричной записи этого числа цифрой 7.
Что прошу: собственно помощь в выполнении, алгоритм или кусок кода - кто чем поможет.
PS: функции использовать нельзя..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2011, 21:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Побитовые операции, работа с шестнадцатеричной записью (C++):

работа с записью числа в шестнадцатеричной сс
Доброго времени суток. Помогите, пожалуйста, с лабораторкой. На ввод даётся...

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

Побитовые операции
Задание: Дано целое неотрицательное число. Определить количество составляющих...

Побитовые операции
Задача: битовый образ 8*8 задается при помощи 8 байт, каждый байт состоит,...

Побитовые операции
Помогите пожалуйста, никак не могу справиться с этой задачкой. Выделить из...

Побитовые операции
От друга услышал идею о побитовой сортировки имен (например). К примеру, если у...

26
xAtom
917 / 742 / 299
Регистрация: 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);
Удачи !
1
IIIa66uMEM6eP
заставил Бендера
445 / 301 / 16
Регистрация: 05.12.2010
Сообщений: 1,662
Записей в блоге: 6
29.03.2011, 17:38  [ТС] #22
ValeryS, ваша ирония тут не к месту. код си и си ++ сильно отличаются.
спасибо за участие, все понятно.
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
30.03.2011, 14:18 #23
Неправильно - number и mask должны быть типа unsigned int
Иначе отрицательные числа фиг знает как сдвигаются

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

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

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

В C++ никто не запрещает использовать printf()
Поэтому с минимальными изменениями код C можно использовать как C++
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
30.03.2011, 14:24 #24
Цитата Сообщение от odip Посмотреть сообщение
Неправильно - number и mask должны быть типа unsigned int
на данную задачу это не влияет
Цитата Сообщение от odip Посмотреть сообщение
Иначе отрицательные числа фиг знает как сдвигаются
очень даже изветсно как сдвигаются
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,440
Записей в блоге: 30
30.03.2011, 14:46 #25
Цитата Сообщение от kazak Посмотреть сообщение
очень даже изветсно как сдвигаются
Сдвиг вправо - он unspecified по части заполнения старших битов. Но поскольку дальше накладывается маска и откидываются старшие биты, то результат операции сдвига вправо и наложения маски оказывается вполне определённым. В данной программе единственное место, которое отработает (или может отработать) неправильно - это "cin >> number" для чисел, которые больше, чем 2^31

А вообще в битовых операциях знаковость критична только для сдвига вправо. Для всех остальных операций пофигу
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
30.03.2011, 15:26 #26
Цитата Сообщение от Evg Посмотреть сообщение
Сдвиг вправо - он unspecified по части заполнения старших битов.
Это по стандарту?
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,440
Записей в блоге: 30
30.03.2011, 15:39 #27
Цитата Сообщение от kazak Посмотреть сообщение
Это по стандарту?
Да. Говорится, что он может быть либо логическим, либо арифметическим. Постфактум на всех "нормальных" архитектурах для беззнаковых чисел делается логический сдвиг, для знаковых - арифметический
1
30.03.2011, 15:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2011, 15:39
Привет! Вот еще темы с решениями:

Побитовые операции
Всем доброго утра. Дана такая задача: есть два чсила,поменять местами 2...

Побитовые операции
Здравствуйте уважаемые читатели форума! СОвсем не представляю как сделать...

Побитовые операции в С++
Здраствуйте. Нужно написать программу которая будед считывать количество...

Побитовые операции на с++ (<< и >>)
Подскажите пожалуйста, такая задача - побитовый сдвиг на заданное количество...


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

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

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