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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.90
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
#1

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

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

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

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

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

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

Побитовые операции - C++
Всем доброго утра. Дана такая задача: есть два чсила,поменять местами 2 последние цифры этих чисел между собой, т.е. 2 последних Х заменить...

Побитовые операции в С++ - C++
Здраствуйте. Нужно написать программу которая будед считывать количество единичек (1) в побитовом представлении числа. Пример input: 15 ...

Побитовые операции - C++
Помогите решить несколько задач по битовым операциям,они все малы по реализации. И объяснить начиная с 3 задачи,что нужно сделать?А то не...

26
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
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;
}
одна беда - код неправильный, некоторые числа по ошибке корёжит...
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
29.03.2011, 02:00  [ТС] #17
Цитата Сообщение от easybudda Посмотреть сообщение
некоторые числа по ошибке корёжит
дайте пример, если не сложно... надо думать как поправить
0
ValeryS
Модератор
6653 / 5062 / 470
Регистрация: 14.02.2011
Сообщений: 16,926
29.03.2011, 02:26 #18
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
Цель лабы
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
я не понимаю кода "с"
как же до лаб то допустили
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
29.03.2011, 11:10 #19
odip, человек вводит число в десятичном представлении.. в этом проблема.
Это проблема существует только в твоей голове
Нет никакой разницы в какой системе вводить число
Число - оно вообще не зависит от системы счисления !

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

какие 7 проверок?
считаем что unsigned int занимает 4 байта
Итого в числе будет 8 16-ричных цифр
Значит нужно 8 повторить код замены, который я написал в посте #2
1
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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;
}
2
xAtom
915 / 740 / 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);
Удачи !
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
29.03.2011, 17:38  [ТС] #22
ValeryS, ваша ирония тут не к месту. код си и си ++ сильно отличаются.
спасибо за участие, все понятно.
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
30.03.2011, 14:18 #23
Неправильно - number и mask должны быть типа unsigned int
Иначе отрицательные числа фиг знает как сдвигаются

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

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

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

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

А вообще в битовых операциях знаковость критична только для сдвига вправо. Для всех остальных операций пофигу
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
30.03.2011, 15:26 #26
Цитата Сообщение от Evg Посмотреть сообщение
Сдвиг вправо - он unspecified по части заполнения старших битов.
Это по стандарту?
0
Evg
Эксперт CАвтор FAQ
17937 / 6168 / 411
Регистрация: 30.03.2009
Сообщений: 16,932
Записей в блоге: 27
30.03.2011, 15:39 #27
Цитата Сообщение от kazak Посмотреть сообщение
Это по стандарту?
Да. Говорится, что он может быть либо логическим, либо арифметическим. Постфактум на всех "нормальных" архитектурах для беззнаковых чисел делается логический сдвиг, для знаковых - арифметический
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2011, 15:39
Привет! Вот еще темы с ответами:

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

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

Побитовые операции - C++
1-программа #include &lt;stdio.h&gt; #include &lt;windows.h&gt; int main(void) { char g; /* ??? ????????? */ char s; /* ??????? ?????? */ ...

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


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

Или воспользуйтесь поиском по форуму:
27
Yandex
Объявления
30.03.2011, 15:39
Ответ Создать тему
Опции темы

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