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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
sergey.shuvalov
-6 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 268
#1

Перемещение содержимого из одного байта в другой байт - C++

15.07.2013, 12:20. Просмотров 1295. Ответов 32
Метки нет (Все метки)

Здравствуйте все.
Есть
char A=3;
char B=0;
Как переместить физическое содержание битов из байта A в байт В, чтобы стало
A=0
B=3;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 12:20     Перемещение содержимого из одного байта в другой байт
Посмотрите здесь:

Перемещение содержимого одного контейнера в другой - C++
Нужно переместить содержимое обьекта vector в обьект list. Подскажите пожалуйста!

Копирование содержимого одного текстового файла в другой - C++
Открытие одного текстового файла и создание другого с записью в него информации с первого открытого файла, делал так как знал короче говоря...

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

Как прочитать несколько байтов в файле с n-го байта по m-й байт ? - C++
Как прочитать несколько байтов в файле с n-го байта по m-й байт ?

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

Из одного вектора в другой - C++
Есть у меня вектор уникальных указателей std::vector<std::unique_ptr<Polygon>> ObjList; Так же имеется класс, в котором тоже...

из одного файла в другой - C++
подскажите пожалуйста, как скопировать полностью бит в бит из одного exe в другой exe? Чтото не получается :) int main() { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.07.2013, 12:23     Перемещение содержимого из одного байта в другой байт #2
C++
1
2
3
char c = b;
b = a;
a = c;
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 12:31     Перемещение содержимого из одного байта в другой байт #3
C
1
    A ^= B ^= A ^= B;
sergey.shuvalov
-6 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 268
15.07.2013, 12:39  [ТС]     Перемещение содержимого из одного байта в другой байт #4
А ^= это чё таке ?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 12:54     Перемещение содержимого из одного байта в другой байт #5
Это побитовая операция XOR. А такое выражение - просто trick.
sergey.shuvalov
-6 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 268
15.07.2013, 13:29  [ТС]     Перемещение содержимого из одного байта в другой байт #6
А сдвигом как-нибудь можно сдвинуть из А в В ?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 13:37     Перемещение содержимого из одного байта в другой байт #7
Описание первого: http://en.wikipedia.org/wiki/XOR_swap_algorithm
Цитата Сообщение от sergey.shuvalov Посмотреть сообщение
А сдвигом как-нибудь можно сдвинуть из А в В ?
Без использования дополнительных переменных/регистров и с размеров исходных переменных 8 бит думаю никак.
Можно также через ассемблер: xchg ah, al
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
15.07.2013, 15:05     Перемещение содержимого из одного байта в другой байт #8
C++
1
 A ^= B ^= A ^= B;
Цитата Сообщение от lazybiz Посмотреть сообщение
А такое выражение - просто trick.
Которое, к тому же, порождает неопределенное поведение программы. :-)
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 15:14     Перемещение содержимого из одного байта в другой байт #9
В данном примере, никаких неопределенных поведений не порождает.
C
1
2
3
    char A = 'a';
    char B = 'b';
    A ^= B ^= A ^= B;
Dr_Quake
Заблокирован
15.07.2013, 15:16     Перемещение содержимого из одного байта в другой байт #10
CheshireCat, Для этого и придумали стандарты C++, не так ли?

lazybiz, asm твой вариант - это "нечестный" метод, во-первых оно нафиг не нужно ибо xchg не умеет операнды в памяти и идёт mov как минимум несколько раз, во-вторых с асмом можно просто использовать первый попавшийся рабочий регистр как третью переменную для обмена, а это выход за дозволенную память, это уже предлагали выше с с.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 15:21     Перемещение содержимого из одного байта в другой байт #11
Dr_Quake, цена вопроса - три операции XOR. Это много? Лишний регистр не всегда бывает под рукой. И при чем тут xchg ?
Dr_Quake
Заблокирован
15.07.2013, 15:22     Перемещение содержимого из одного байта в другой байт #12
lazybiz, я про другой твой вариант.

Перемещение содержимого из одного байта в другой байт
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 15:24     Перемещение содержимого из одного байта в другой байт #13
Dr_Quake, ну так я и не говорил что это идеальный вариант на все случаи жизни. Если писать на асме и переменные уже в регистрах то вполне сойдет.
Dr_Quake
Заблокирован
15.07.2013, 15:33     Перемещение содержимого из одного байта в другой байт #14
lazybiz, я про то, что в виде asm вставки в C++ переменные никогда не будут уже в регистрах.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2013, 15:51     Перемещение содержимого из одного байта в другой байт
Еще ссылки по теме:

Из одного формата в другой - C++
Здравствуйте. мне нужно написать программу которая открывает файл с расширением .cpp извлекает от туда все строки и сохраняет в файле с...

Копирование одного раздела в другой - C++
Задание: Скопировать определенный (задается в коде) раздел реестра в другой раздел (так же задается в коде). Есть пример работы с...

Копирование одного стека в другой - C++
Написать программу копирования одного стека в другой

Переписать из одного массива в другой - C++
Дан массив целых чисел из n элементов. Известно, что в массиве все элементы по модулю меньше 100. Переписать в другой массив из данного...

Доступ из одного класса в другой - C++
Мучаюсь полдня. Помогите. Суть такая. Есть два класса PictureForm и LevelForm. Как из класса LevelForm вызвать функцию класса PictureForm...


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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 15:51     Перемещение содержимого из одного байта в другой байт #15
Вообще я про вставку не говорил. Но раз на то пошло:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main()
{
    char a = 'a';
    char b = 'b';
 
    __asm__ __volatile__ (
    "       xchg    al, bl      ;"
    : "=a" (a), "=b" (b)
    :  "a" (a),  "b" (b)
    :
    );
 
    printf( "%c, %c\n", a, b );
 
    return 0;
}
Почему ты так уверен что "переменные никогда не будут уже в регистрах" ? Листинг дизассемблера показать?
Это маленький пример. Смысла в нем мало, поэтому придираться не стоит.
Yandex
Объявления
15.07.2013, 15:51     Перемещение содержимого из одного байта в другой байт
Ответ Создать тему
Опции темы

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