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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.81
olga32
0 / 0 / 0
Регистрация: 15.06.2011
Сообщений: 17
#1

инвертирование - C++

09.11.2011, 17:52. Просмотров 4243. Ответов 9
Метки нет (Все метки)

Подскажите как инвертировать шестнадцатеричное число , но не всё , а первые 8-мь разрядов? Например х=df17?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
Заблокирован
09.11.2011, 18:14     инвертирование #2
Цитата Сообщение от olga32 Посмотреть сообщение
Подскажите как инвертировать шестнадцатеричное число , но не всё , а первые 8-мь разрядов? Например х=df17?
инверсия определеная для всех типов одинаково как "~", а чтобы работать с группой разрядов есть сдвиг, и есть еще одно но! инверсия подразумевает знаковые числа, в то время как адреса - беззнаковые, вот пример
C
1
2
3
4
5
6
7
8
int main ()
{
    double x;
    long long int y = &x;
    printf("%x и ~%x\n", y, ~y);
 
    return 0;
}
вывод: bf8b05f0 и ~ffffffff
так что было бы неплохо познакомиться с предметом обсуждения более детально
olga32
0 / 0 / 0
Регистрация: 15.06.2011
Сообщений: 17
09.11.2011, 18:26  [ТС]     инвертирование #3
Но мне надо инвертировать только 1-е 8-мь разрядов, например было 1110 1010 0011 0011 и должно стать 0001010100110011
alkagolik
Заблокирован
09.11.2011, 18:42     инвертирование #4
Цитата Сообщение от olga32 Посмотреть сообщение
Но мне надо инвертировать только 1-е 8-мь разрядов, например было 1110 1010 0011 0011 и должно стать 0001010100110011
вот, теперь начинает проясняться. вам надо инвертировать первые восемь двоичных разрядов. Это просто оператор инверсии "~" переводит код из прямого в обратный, для перевода обратного кода в дополнительный надо к нему добавить 1 (инкремент), а для работы с группой разрядов в вашем случае надо осуществить сдвиг вправо (я же не знаю с каким топом вы работаете, так что длину сдвига вычисляйте сами), отработать, а потом обратно осуществить сдвиг, но уже влево.

Добавлено через 8 минут
и не забывайте что "первый" разряд (считаем слева) - это знаковый разяд.
olga32
0 / 0 / 0
Регистрация: 15.06.2011
Сообщений: 17
09.11.2011, 18:49  [ТС]     инвертирование #5
Ну напишите пожалуйста на примере вот число 0xdf17
alkagolik
Заблокирован
09.11.2011, 19:03     инвертирование #6
Цитата Сообщение от olga32 Посмотреть сообщение
Ну напишите пожалуйста на примере вот число 0xdf17
а вам знак сохранять надо?
olga32
0 / 0 / 0
Регистрация: 15.06.2011
Сообщений: 17
09.11.2011, 19:11  [ТС]     инвертирование #7
У меня беззнаковое число unsignet Shot
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.11.2011, 19:22     инвертирование #8
Инвертирование первых 8 младших бит
C++
1
2
3
 
    unsigned short x = 12345, y;
   y = (~(x & 0xFF) & 0xFF) | (x & ~0xFF);
Инвертирование первых 8 старших бит
C++
1
2
    unsigned short x = 12345, y;
    y = (~(x & 0xFF00) & 0xFF00) | (x & ~0xFF00);
alkagolik
Заблокирован
09.11.2011, 21:11     инвертирование #9
y = x ^ 0xFF00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2011, 21:59     инвертирование
Еще ссылки по теме:

C++ Инвертирование строк
Инвертирование регистра символов C++
C++ Поменять инвертирование в массиве с каждого столбца, на каждую строку
Перевести числа в двоичную систему, затем провести инвертирование C++
Инвертирование слов в строке C++

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.11.2011, 21:59     инвертирование #10
Цитата Сообщение от alkagolik Посмотреть сообщение
y = x ^ 0xFF00
Точно, молодец! Совсем забыл, что
x^1 = ~x
x^0 = x
Yandex
Объявления
09.11.2011, 21:59     инвертирование
Ответ Создать тему
Опции темы

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