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

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

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

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

27.03.2011, 21:21. Просмотров 2941. Ответов 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
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.03.2011, 09:24 #2
C
1
2
3
4
5
unsigned int num= 0x.....;
 
if ( (num&0x0000000F) == 0x0000000F ) { num&= 0xFFFFFFF7; }
 
/* остальные 7 проверок сам напиши */
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
28.03.2011, 21:23  [ТС] #3
odip, человек вводит число в десятичном представлении.. в этом проблема.
И как
C++
1
(num&0x0000000F) == 0x0000000F
Прокомментируйте пожалуйста алгоритм, не понял..

Добавлено через 10 часов 44 минуты
какие 7 проверок?
0
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
28.03.2011, 21:46 #4
ну, возможно, следует в цикле переводить в 16-ю систему счисления, и параллельно строить выходное число, заменяя F на 7
а с побитовыми операциями, начинать с мл. разряда и рассматривать по 4 бита, если они совпадают с 1111 то менять на 0111
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
28.03.2011, 22:20  [ТС] #5
Цитата Сообщение от eXXXXXXXXXXX Посмотреть сообщение
с 1111 то менять на 0111
вы сейчас предложили мне заменить десятичную на 16 а результат сравнивать в двоичной..
0
Evg
Эксперт CАвтор FAQ
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,203
Записей в блоге: 27
28.03.2011, 22:24 #6
Какая в пень разница, в каком представлении вводят число. В машине оно всегда хранится в двоичном виде и все операции над числами машина проводит в двоичном представлении

По поводу представления чисел почитай Неочевидные ответы на простые вопросы раздел 8, может ясность какая появится
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
28.03.2011, 22:27  [ТС] #7
Цитата Сообщение от Evg Посмотреть сообщение
может ясность какая появится
вы мне это уже писали)
проблема что в данном контексте задачи - все же мы вводим в одной сс а работаем над ней в другой.
0
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
28.03.2011, 22:33 #8
например, число 241(F1 в 16-ой) хранится в виде посл-ти битов 11110001. Вы можете применять побитовые операции к этому числу, и получать необходимое
0
Evg
Эксперт CАвтор FAQ
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,203
Записей в блоге: 27
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;
на результат это никоим боком не повлияет
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
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;
}
1
Evg
Эксперт CАвтор FAQ
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,203
Записей в блоге: 27
28.03.2011, 23:27 #11
easybudda, а "~0x88888888" вместо "0x77777777" - это чтобы враги не догадались?
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
28.03.2011, 23:32 #12
Evg, ага... мне так нагляднее показалось. семь - это пятнадцать без восьми...
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
29.03.2011, 01:30  [ТС] #13
Цитата Сообщение от easybudda Посмотреть сообщение
мне так нагляднее показалось
я с вашего кода дурею)) точно как для врагов - ни че не понятно)
подскажите как это будет выглядеть на с++
ну или хотяб пару комментариев
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
29.03.2011, 01:38 #14
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
ну или хотяб пару комментариев
Это на одну-то строчку? На самом деле даже и не знаю, что там комментировать... Вроде бы
Цитата Сообщение от easybudda Посмотреть сообщение
семь - это пятнадцать без восьми.
всё сказано... Суть - нужно обнулить каждый четвёртый бит.
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
29.03.2011, 01:40  [ТС] #15
Цитата Сообщение от easybudda Посмотреть сообщение
что там комментировать
я не понимаю кода "с" ..
мне не понятно что делают ("%i", &n) == 1 )
мне не понятно что это - %#x\nAfter: %#x\n", n,

какие то запятые.. хоть бери и синтаксис си учи..
0
29.03.2011, 01:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2011, 01:40
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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