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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
sergey.shuvalov
-2 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 259
15.07.2013, 12:20     Перемещение содержимого из одного байта в другой байт #1
Здравствуйте все.
Есть
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++ Из одного формата в другой
Как прочитать несколько байтов в файле с n-го байта по m-й байт ? C++
Для целого числа А выделить старший байт и поставить его на место младшего байта. старший байт при этом обнулить. C++
C++ Копирование содержимого одного файла в другой посредством командной строки
Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 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
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 12:31     Перемещение содержимого из одного байта в другой байт #3
C
1
    A ^= B ^= A ^= B;
sergey.shuvalov
-2 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 259
15.07.2013, 12:39  [ТС]     Перемещение содержимого из одного байта в другой байт #4
А ^= это чё таке ?
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 12:54     Перемещение содержимого из одного байта в другой байт #5
Это побитовая операция XOR. А такое выражение - просто trick.
sergey.shuvalov
-2 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 259
15.07.2013, 13:29  [ТС]     Перемещение содержимого из одного байта в другой байт #6
А сдвигом как-нибудь можно сдвинуть из А в В ?
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 13:37     Перемещение содержимого из одного байта в другой байт #7
Описание первого: http://en.wikipedia.org/wiki/XOR_swap_algorithm
Цитата Сообщение от sergey.shuvalov Посмотреть сообщение
А сдвигом как-нибудь можно сдвинуть из А в В ?
Без использования дополнительных переменных/регистров и с размеров исходных переменных 8 бит думаю никак.
Можно также через ассемблер: xchg ah, al
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,308
15.07.2013, 15:05     Перемещение содержимого из одного байта в другой байт #8
C++
1
 A ^= B ^= A ^= B;
Цитата Сообщение от lazybiz Посмотреть сообщение
А такое выражение - просто trick.
Которое, к тому же, порождает неопределенное поведение программы. :-)
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 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
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 15:21     Перемещение содержимого из одного байта в другой байт #11
Dr_Quake, цена вопроса - три операции XOR. Это много? Лишний регистр не всегда бывает под рукой. И при чем тут xchg ?
Dr_Quake
Заблокирован
15.07.2013, 15:22     Перемещение содержимого из одного байта в другой байт #12
lazybiz, я про другой твой вариант.

Перемещение содержимого из одного байта в другой байт
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 15:24     Перемещение содержимого из одного байта в другой байт #13
Dr_Quake, ну так я и не говорил что это идеальный вариант на все случаи жизни. Если писать на асме и переменные уже в регистрах то вполне сойдет.
Dr_Quake
Заблокирован
15.07.2013, 15:33     Перемещение содержимого из одного байта в другой байт #14
lazybiz, я про то, что в виде asm вставки в C++ переменные никогда не будут уже в регистрах.
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 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;
}
Почему ты так уверен что "переменные никогда не будут уже в регистрах" ? Листинг дизассемблера показать?
Это маленький пример. Смысла в нем мало, поэтому придираться не стоит.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,308
15.07.2013, 15:55     Перемещение содержимого из одного байта в другой байт #16
lazybiz, к сожалению, порождает (Ст., 1.9/15). Да, результат этого UB может совпадать с "ожидаемым" результатом, но это всего лишь везение. Гарантировать, что он будет совпадать всегда, на всех компиляторах и платформах, - нельзя.
Dr_Quake
Заблокирован
15.07.2013, 15:58     Перемещение содержимого из одного байта в другой байт #17
lazybiz, ну если уж на то пошло - ассоциация переменных с регистрами это очень дурно и считается чуть ли не запрещённым ещё со времён сегментного DOS16(где это имело смысл хотя бы), а с точки зрения асма - неизящно, ror ax,8 и всё, ну и посмотри что генерируется на выходе - ровно то что я писал с кучей mov(по крайней мере для gcc4 что у меня).
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 16:02     Перемещение содержимого из одного байта в другой байт #18
Цитата Сообщение от CheshireCat Посмотреть сообщение
на всех компиляторах
На всех компиляторах не получится. Это будет работать только на GCC.
И еще раз:
Цитата Сообщение от lazybiz Посмотреть сообщение
Это маленький пример. Смысла в нем мало, поэтому придираться не стоит.
Я лишь опровергнул слова:
Цитата Сообщение от Dr_Quake Посмотреть сообщение
переменные никогда не будут уже в регистрах
То что они там будут всегда я и не утверждал.

Добавлено через 1 минуту
Цитата Сообщение от Dr_Quake Посмотреть сообщение
ассоциация переменных с регистрами это очень дурно и считается чуть ли не запрещённым ещё со времён сегментного DOS16
Ты можешь остаться при своем мнении, я тебя переубеждать не собираюсь. Я просто опровергнул твои слова. Давай на этом и закончим.
Dr_Quake
Заблокирован
15.07.2013, 16:08     Перемещение содержимого из одного байта в другой байт #19
lazybiz, суть - не надо "опровергать" примеры внестандартными исключениями.

Добавлено через 5 минут
P.S. Особенно учитывая что с XOR метод ты уже рассказал. Это же старинная "задачка", только выглядит на универсальном чуть по другому.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2013, 16:09     Перемещение содержимого из одного байта в другой байт
Еще ссылки по теме:

C++ Написать программу записи содержимого из одного файла в другой : Тип файла текстовый
C++ Закодировать файл. Взять 7 байт. Первый бит каждого байта переместить в 8 байт
Перемещение содержимого одного контейнера в другой C++

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

Или воспользуйтесь поиском по форуму:
sergey.shuvalov
-2 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 259
15.07.2013, 16:09  [ТС]     Перемещение содержимого из одного байта в другой байт #20
Может я не правильно сформулировал интересующий меня вопрос, но попробую сделать это ещё раз.
Есть байт char A, пусть все его ячейки пусты, кроме одной, т.е. char A =1 или 00000001.
Есть байт char В, пусть все его ячейки пусты. т.е. char B =0 или 00000000.
Вопрос.
Как дать пендаля заряду в char A, чтобы он переместился в char B, и чтобы стало так:
char A=0 или 00000000
char B=1 или 000000001
Вот в чём вопрос.
Yandex
Объявления
15.07.2013, 16:09     Перемещение содержимого из одного байта в другой байт
Ответ Создать тему
Опции темы

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