![]() |
|
Модераторы: bsa |
![]()
|
|
| NevzorovRuslan |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.7.2011 Репутация: нет Всего: нет |
Интересует строка:
Я читал про XOR, знаю что это исключающие ИЛИ, знаю что XOR позволяет узнать x и y с помощью z, но вот что я не понимаю.. Как он шифрует букву? Написано что XOR - битовая функция, он берет бит буквы? или что? кто-нибудь может подробно объяснить? Очень хочется узнать, не первый раз сталкиваюсь, раньше забивал, но теперь хочется поднять занавес. Добавлено через 1 минуту и 24 секунды Заранее спасибо ) Добавлено через 6 минут и 41 секунду
Так, вроде становится понятнее, C++ сам берет ASCII код символа? А дальше как работает проверка? ASCII ^ int? Объясните? Добавлено через 7 минут и 51 секунду Жду ответов =) |
||||||
|
|||||||
| borisbn |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Буква - это то, что выводится на экран. Компьютеры оперируют исключительно числами (битами). То, что хранится в char'е на самом деле - код символа (или буквы, как угодно). При выводе на экран код 0x20 интерпретируется как пробел, 0x41 - как 'A' и т.д. Так что операция XOR числа с числом - это нормально. В Вашем случе кода символа (чем не число) с числом i.
вот эту строчку можно переписать так
А вот таблица истинности операции XOR
или так
Таким образом верно равенство
можешь проверить Операция X ^ Y в Си делает побитовый XOR обоих операндов, т.е. берёт 0-й бит X, XOR'ит его с 0-м битом Y и кладёт в 0-й бит результата, затем берёт 1-й бит X, XOR'ит его с 1-м битом Y и кладёт в 1-й бит результата и т.д. Возмём символ 'A' (код 0x41 или 01000001 в двоичном виже) и проXORим его с числом 42 (00101010)
получилось 0x5B. Попробуй сам сделать 0x5B ^ 42 Это сообщение отредактировал(а) borisbn - 25.7.2011, 01:31 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||||||
|
|||||||||||||
| NevzorovRuslan |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.7.2011 Репутация: нет Всего: нет |
Код:
Результат:
borisbn, огромное спасибо, кажется все разживал кроме Таблицы истинности, не могу понять как она работает, изучаю полученный результат выше.. Добавлено через 2 минуты и 23 секунды Всееее, огромное спасибо, теперь я понял!! =)) Просто сначало не увидел отредактированое сообщение Спасибо!!! |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
XOR ещё по другому называют "сложение по модулю 2", если речь идёт о XOR'е одного бита. Его (XOR) можно представить как
где X, Y - одиночные биты, ^ - XOR + - сложение (обычное) % - остаток от деления Я не знаю, можно ли это сделать в пхп, но гораздо удобнее и нагляднее будет, если ты будешь выводить все числа (и коды символов и i и результат XOR-a) в двоичном виде (0-ки и 1-ки) Добавлено @ 01:42 а за такие: руки отрывать Это сообщение отредактировал(а) borisbn - 25.7.2011, 01:43 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| NevzorovRuslan |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.7.2011 Репутация: нет Всего: нет |
я в данный момент делаю XOR на листочке =) Десятичная: 10 XOR 7 Двоичная: 1010 XOR 111 1010 111 ==== 101 Что делать с первой 1 у 1010? Ее же не с чем XOR'ить!? |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| NevzorovRuslan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.7.2011 Репутация: нет Всего: нет |
volatile, спасибо, буду знать!
borisbn, раньше у меня endl работал без #define, в этот раз выдал ошибку, пришлось #define'ить.. В чем может быть проблема? |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| NevzorovRuslan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.7.2011 Репутация: нет Всего: нет |
||||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
есть какая-нибудь вероятность что компилятор превратит это в что-то подобное:
т.е. будет делать xor сразу на памяти а не в регистрах? (просто я ему не доверяю и делаю это сам) вообще есть какой-нибудь готовый вариант функции типа memmove которая делала бы xor при этом выбирая делать это обычными регистрами или mmx/sse? разве любая цифра % 2 не выдаст 1 или 0? это не очень похоже на 1 ) не догоняю с модулем. Это сообщение отредактировал(а) asmdzen - 25.7.2011, 07:50 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
X в данном примере либо 0 либо 1, а не число (как, впрочем и Y и результат) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
borisbn, понял, спасибо
|
|||
|
||||
| volatile |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Не стоит заморачиватсья на таких вещах, доверяйте компилятору. Студия, по крайней мере, сделала все правильно, практически идеально:
исходник С
|
||||||
|
|||||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
volatile, это вполне устраивает )
я думал он там как всегда замудрит что-то свое, видел код где xor выполняется не очень красиво. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |