Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/40: Рейтинг темы: голосов - 40, средняя оценка - 4.50
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
1

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

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

Author24 — интернет-сервис помощи студентам
Добрый вечер. Цель лабы обработка числовой информации, работа с побитовыми операциями.
Сама задача: Дано длинное целое неотрицательное число. Заменить каждую цифру F в шестнадцатеричной записи этого числа цифрой 7.
Что прошу: собственно помощь в выполнении, алгоритм или кусок кода - кто чем поможет.
PS: функции использовать нельзя..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2011, 21:21
Ответы с готовыми решениями:

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

Определить является ли текст шестнадцатеричной записью числа, кратного 5
здравия всем, вообщем есть задачка на литерные переменные: В заданный непустой текст входят...

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

Определить, является ли текст шестнадцатеричной записью числа, кратного 5 (перевод с Pascal)
var b:set of char; a:string; c,sum,i,f:integer; begin b:=; readln (a); for i:=1 to...

26
Эксперт С++
7175 / 3234 / 81
Регистрация: 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
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
28.03.2011, 21:23  [ТС] 3
odip, человек вводит число в десятичном представлении.. в этом проблема.
И как
C++
1
(num&0x0000000F) == 0x0000000F
Прокомментируйте пожалуйста алгоритм, не понял..

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

По поводу представления чисел почитай Неочевидные ответы на простые вопросы раздел 8, может ясность какая появится
0
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
28.03.2011, 22:27  [ТС] 7
Цитата Сообщение от Evg Посмотреть сообщение
может ясность какая появится
вы мне это уже писали)
проблема что в данном контексте задачи - все же мы вводим в одной сс а работаем над ней в другой.
0
32 / 32 / 6
Регистрация: 24.02.2011
Сообщений: 126
28.03.2011, 22:33 8
например, число 241(F1 в 16-ой) хранится в виде посл-ти битов 11110001. Вы можете применять побитовые операции к этому числу, и получать необходимое
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
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
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
28.03.2011, 23:27 11
easybudda, а "~0x88888888" вместо "0x77777777" - это чтобы враги не догадались?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
28.03.2011, 23:32 12
Evg, ага... мне так нагляднее показалось. семь - это пятнадцать без восьми...
0
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
29.03.2011, 01:30  [ТС] 13
Цитата Сообщение от easybudda Посмотреть сообщение
мне так нагляднее показалось
я с вашего кода дурею)) точно как для врагов - ни че не понятно)
подскажите как это будет выглядеть на с++
ну или хотяб пару комментариев
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
29.03.2011, 01:38 14
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
ну или хотяб пару комментариев
Это на одну-то строчку? На самом деле даже и не знаю, что там комментировать... Вроде бы
Цитата Сообщение от easybudda Посмотреть сообщение
семь - это пятнадцать без восьми.
всё сказано... Суть - нужно обнулить каждый четвёртый бит.
0
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
29.03.2011, 01:40  [ТС] 15
Цитата Сообщение от easybudda Посмотреть сообщение
что там комментировать
я не понимаю кода "с" ..
мне не понятно что делают ("%i", &n) == 1 )
мне не понятно что это - %#x\nAfter: %#x\n", n,

какие то запятые.. хоть бери и синтаксис си учи..
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
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
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
29.03.2011, 02:00  [ТС] 17
Цитата Сообщение от easybudda Посмотреть сообщение
некоторые числа по ошибке корёжит
дайте пример, если не сложно... надо думать как поправить
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
29.03.2011, 02:26 18
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
Цель лабы
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
я не понимаю кода "с"
как же до лаб то допустили
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 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
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
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
29.03.2011, 14:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2011, 14:10
Помогаю со студенческими работами здесь

Определить для строки b$, является ли она правильной записью целого в шестнадцатеричной системе счисления
Определить для строки b$, является ли она правильной записью целого числа без знака в...

Побитовые операции
Выбрать алгоритм, составить его блок-схему и программу для решения выбранного варианта задания. Во...

Побитовые операции в с++
здравствуйте! не могу понять, почему когда я применяю к числу a=0b01111101 (в десятичной форме...

Побитовые операции
помогите пожалуйста решить задачу. 1) с помощью побитовых операций реализовать вызов функции...

Побитовые операции
Задача: Ввести последовательность из 8 символов. Если символ – восьмеричная цифра, то заменить в...

Побитовые операции
Есть число 0x7с1b. Перевожу его в двоичный вид - 0111110000011011. Каждый бит за что то отвечает....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru