Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
sampuck
0 / 0 / 0
Регистрация: 13.05.2017
Сообщений: 15
1

Что значит ^= ?

13.05.2017, 13:24. Просмотров 963. Ответов 23
Метки нет (Все метки)

нашел в коде данную фичу (язык С)
не понимаю что конкретно она выполняет
пример из кода
...
mistake ^= i+1;
...
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2017, 13:24
Ответы с готовыми решениями:

Что значит Handle hf? Что в эту функцию нужно передавать
мне нужно создать функцию Node * ReadNode(HANDLE hf); (Node это структура) Так...

Sleep(8000) - что значит? На что можно заменить в борланд с++?
Не распознаёт Sleep(8000) . Если за комментировать пишет что f заданно но не...

Что значит?
std::cout << (myCircle.pointInCircle(x, y) ? "In circle" : "Out of circle"); ...

что значит /=
Бродил по форуму и наткнулся на вот такой синтаксис temp/=10; а что это значит

Что значит ->?
Наткнулся на непонятное место в непонятном коде. Оно показалось мне особенно...

23
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
13.05.2017, 13:32 2
Лучший ответ Сообщение было отмечено sampuck как решение

Решение

Цитата Сообщение от sampuck Посмотреть сообщение
mistake ^= i+1;
C++
1
mistake = mistake ^ i+1;
http://www.cplusplus.com/doc/boolean/
1
Байт
Эксперт C
18527 / 12032 / 2508
Регистрация: 24.12.2010
Сообщений: 24,325
13.05.2017, 13:36 3
Эквивалентно
C++
1
mistake = mistake ^ (i+1);
А "^" - это побитовая операция (исключаюшее ИЛИ)
0^0 = 1^1 = 0
0^1 = 1^0 = 1
http://www.c-cpp.ru/books/bitovye-operatory

Добавлено через 1 минуту
Цитата Сообщение от nd2 Посмотреть сообщение
mistake = mistake ^ i+1;
Не помню приоритетов. Скобочки не нужны? Но не повредят - это точно
1
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
13.05.2017, 13:39 4
Цитата Сообщение от Байт Посмотреть сообщение
Скобочки не нужны?
Нет.

Добавлено через 1 минуту
Цитата Сообщение от Байт Посмотреть сообщение
Но не повредят - это точно
Да, вреда не будет.
0
liv
553 / 474 / 143
Регистрация: 07.10.2015
Сообщений: 1,594
Завершенные тесты: 1
13.05.2017, 13:46 5
Цитата Сообщение от nd2 Посмотреть сообщение
Да, вреда не будет.
Скорее польза: с беглого взгляда ясен смысл.
Программы все таки пишутся для человека...
1
sampuck
0 / 0 / 0
Регистрация: 13.05.2017
Сообщений: 15
13.05.2017, 14:02  [ТС] 6
так это получается что mistake возведётся в степень (i+1)?
0
Байт
Эксперт C
18527 / 12032 / 2508
Регистрация: 24.12.2010
Сообщений: 24,325
13.05.2017, 14:04 7
Цитата Сообщение от sampuck Посмотреть сообщение
так это получается что mistake возведётся в степень (i+1)?
Почему? Откуда вы это взяли? Вы хоть читаете, что вам отвечают? А если нет - зачем вопросы задавать?
1
liv
553 / 474 / 143
Регистрация: 07.10.2015
Сообщений: 1,594
Завершенные тесты: 1
13.05.2017, 14:09 8
sampuck, прочитайте внимательно еще раз пост #3
1
sampuck
0 / 0 / 0
Регистрация: 13.05.2017
Сообщений: 15
13.05.2017, 14:15  [ТС] 9
спасибо, разобрался
0
nd2
13.05.2017, 14:19
  #10

Не по теме:

Цитата Сообщение от _liv_ Посмотреть сообщение
Программы все таки пишутся для человека...
Для программистов.

0
sampuck
0 / 0 / 0
Регистрация: 13.05.2017
Сообщений: 15
13.05.2017, 14:32  [ТС] 11
не подскажите ещё как будет работать данная функция
для i=0 всё понятно, но для i=5, допустим, не понятно как 5 будет сравниваться с нулем, если это логический оператор
я имею в виду вот это

mistake = mistake ^ (5+1)
C++
1
2
3
4
5
6
7
8
9
10
11
char input[1024];
int len;
 
int find_mistake()
    {
        int i, mistake = 0;
            for (i = 0; i < len; i ++)
                    if (input[i] == '1')
                        mistake = mistake ^ (i + 1);
                    return mistake;
    }
0
liv
553 / 474 / 143
Регистрация: 07.10.2015
Сообщений: 1,594
Завершенные тесты: 1
13.05.2017, 14:36 12

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
Для программистов.
Программисты, что не люди? :) Ок, пусть будет для подмножества множества людей - программистов...



Добавлено через 1 минуту
sampuck, а руками текст набрать? Текст картинками вообще-то запрещен Правилами...
0
Байт
Эксперт C
18527 / 12032 / 2508
Регистрация: 24.12.2010
Сообщений: 24,325
13.05.2017, 14:37 13
0^6 = 6
1^6 = 7
2^6 = 4
3^6 = 5
4^6 = 2
5^6 = 5
6^6 = 0
7^6 = 1
(Если нигде не ошибся)
1
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
13.05.2017, 14:37 14
Цитата Сообщение от Байт Посмотреть сообщение
Не помню приоритетов. Скобочки не нужны? Но не повредят - это точно
лишние скобки удаляются компилятором потом?
0
Байт
Эксперт C
18527 / 12032 / 2508
Регистрация: 24.12.2010
Сообщений: 24,325
13.05.2017, 14:39 15
Цитата Сообщение от eXPonent Посмотреть сообщение
удаляются компилятором потом?
В результирующем объектом коде их просто вообще нет.
0
sampuck
0 / 0 / 0
Регистрация: 13.05.2017
Сообщений: 15
13.05.2017, 14:41  [ТС] 16
Цитата Сообщение от _liv_ Посмотреть сообщение
а руками текст набрать? Текст картинками вообще-то запрещен Правилами...
прошу прощения, исправлюсь
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
13.05.2017, 14:44 17

Не по теме:

Цитата Сообщение от _liv_ Посмотреть сообщение
Программисты, что не люди?
Люди, но не все люди программисты.



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от _liv_ Посмотреть сообщение
Ок, пусть будет для подмножества множества людей - программистов...
Программисты должны разбираться в приоритетах операций.

0
liv
553 / 474 / 143
Регистрация: 07.10.2015
Сообщений: 1,594
Завершенные тесты: 1
13.05.2017, 14:50 18
Цитата Сообщение от sampuck Посмотреть сообщение
не понятно как 5 будет сравниваться с нулем, если это логический оператор
Откуда Вы это взяли?
Делается следующее:
Вначале mistake = 0;
Далее, по всем элементам массива input проверяем элемент на равенство символу '1'
И если равен, то меняем mistake, делая "исключающее или" (xor) старого содержимого mistake и
увеличенного на 1 индекса элемента, равного '1'
Где Вы тут увидели сравнение на 0?
0
sampuck
0 / 0 / 0
Регистрация: 13.05.2017
Сообщений: 15
13.05.2017, 15:07  [ТС] 19
Цитата Сообщение от _liv_ Посмотреть сообщение
Откуда Вы это взяли?
Делается следующее:
Вначале mistake = 0;
Далее, по всем элементам массива input проверяем элемент на равенство символу '1'
И если равен, то меняем mistake, делая "исключающее или" (xor) старого содержимого mistake и
увеличенного на 1 индекса элемента, равного '1'
Где Вы тут увидели сравнение на 0?
видимо, я чего то явно не понимаю
"исключающее или" - это же булева функция. Как она будет работать с числами отличными от 0 и 1?
прошу прощения за своё непонимание. хотелось бы конечно докопаться до сути.
спасибо
0
liv
553 / 474 / 143
Регистрация: 07.10.2015
Сообщений: 1,594
Завершенные тесты: 1
13.05.2017, 15:26 20
Цитата Сообщение от sampuck Посмотреть сообщение
видимо, я чего то явно не понимаю
Есть такое дело
xor, да, это булева функция, но она работает со всеми битами чисел.
Например, имеем числа, для простоты 4-битные:
a = 1001b
b = 0101b
Применяя a ^ b, получим:
a^b = (1^0)(0^1)(0^0)(1^1) = 1100b
xor работает не с числами 0 и 1, а с битами чисел.
Добавлю, что Вы, вероятно, спутали с true и false, которые, действительно 1 и 0
Если результат выражения понимать, как логическое, то ложь (0) получим,
если выражение (число) будет равно 0 и истину (1), если выражение (число) не равно 0
(т.е. равно чему угодно, только не 0)

Добавлено через 6 минут
В общем-то, можно применить xor и к величинам, которые равны 0 и 1 (фактически все биты, кроме младшего, равны 0).
В таком случае, старшие биты так и останутся нулями, а младший бит получится как xor младших бит величин...
1
13.05.2017, 15:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2017, 15:26

Что значит new ()
Случайно ошибся и написал double *F1 = new double (count); вместо double *F1 =...

что значит ?
что обозначает ? total += Добавлено через 2 минуты вот програма #include...

C++ Что значит запись
Скажите, пожалуйста, что означает эта запись? Идет цикл, а дальше я не знаю,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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