Перейти к содержимому

Ans c что это

  • автор:

Что делает строка ans^=x, прилагаю задачу и код

^ , как вы справедливо заметили в метках — операция xor.

А запись a @= b означает a = a @ b , т.е.

ans ^= x; 
ans = ans ^ x; 

Если же вопрос о смысле сего действа, то заметим, что после двух xor с одним и тем же числом мы получаем исходное значение:

a ^ x ^ x == a 

Дальше понятно, почему это делается? 🙂

P.S. Картинками здесь вопросы задавать крайне не рекомендуется.

Отслеживать
ответ дан 6 авг 2021 в 16:01
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
Все в порядке, я подправил его вопрос, только примите правку
6 авг 2021 в 16:09

@Harry Я бы решил эту задачу так: int lonelyinteger(vector a) < sort(a.begin(), a.end()); int i = 0; for (; i < a.size(); i+=2) if (a[i] != a[i+1]) break; return a[i]; >ранее не сталкивался с xor и подобными сокращенными циклами for, можно поподробнее разжевать?

6 авг 2021 в 16:12

@Bukashka битовые операции очень эффективные, они позволяют сократить работу кода в несколько раз, но тогда уж если вы паритесь над скоростью, то без векторов, и for_each //(for auto — цикл где перебираются элементы массива, где x == a[i] при обыкновенном переборе). Скорее задача не требует такой выходки достаточно простенького решения за O(n) O(nlogn), что и вы предложили с помощью сортировки, можно также map- ом решить

6 авг 2021 в 16:37

Сокращенный цикл — по сути, ` for(auto x:a) ans^=x;` то же, что for(auto it = a.begin(); it != a.end(); ++it) < x = *it; ans^=x; >. То, что предлагаете вы, имеет сложность O(nlog n) (из-за сортировки)? этот же алгоритм — O(n) с *очень малой константой.

Префиксные операторы увеличения и уменьшения ++ и —

Оператор добавочного префикса (++) добавляет один к операнду. Это добавочное значение является результатом выражения. Операнд должен быть l-значением не типа const . Результат — L-значение того же типа, как у операнда.

Оператор декремента префикса () аналогичен оператору добавочного префикса, за исключением того, что операнд уменьшается по одному, и результатом является это уменьшение значения.

Visual Studio 2017 версии 15.3 и более поздних версий (доступных в /std:c++17 режиме и более поздних версиях): операнд оператора добавочного или декремента может не быть типа bool .

Операторы префиксных и постфиксных инкремента и декремента влияют на свои операнды. Они различаются между собой порядком выполнения инкремента или декремента при вычислении выражения (Дополнительные сведения см. в разделе Операторы приращения и декремента.) В форме префикса приращение или уменьшение происходит до использования значения в оценке выражений, поэтому значение выражения отличается от значения операнда. В постфиксной форме инкремент или декремент выполняется после использования значения при вычислении выражения, поэтому значение выражения совпадает со значением операнда. Например, в следующей программе выполняется вывод на печать » ++i = 6 «.

// expre_Increment_and_Decrement_Operators.cpp // compile with: /EHsc #include using namespace std; int main()

Операнд целочисленного типа или типа с плавающей запятой инкрементируется или декрементируется на целое значение 1. Тип результата совпадает с типом операнда. Операнд типа указателя инкрементируется или декрементируется на значение размера объекта, к которому он относится. Инкрементированный указатель указывает на следующий объект, а декрементированный — на предыдущий.

Так как операторы добавочного и декремента имеют побочные эффекты, использование выражений с операторами добавочного или декремента в макросе препроцессора может иметь нежелательные результаты. Рассмотрим следующий пример.

// expre_Increment_and_Decrement_Operators2.cpp #define max(a,b) ((a)

Макрос разворачивается до следующего выражения:

k = ((++i)<(j))?(j):(++i); 

Если значение i больше или равно j или меньше j на 1, оно будет инкрементировано дважды.

Встраиваемые функции C++ предпочтительнее макросов во многих случаях, поскольку исключают побочные эффекты, подобные описанным здесь, и позволяют языку выполнять более полную проверку типов.

Перевод "cent ans" на русский

Cette conception peut rester sans réparation pendant plus de cent ans.

Такие здания могут простоять без проведения ремонта более ста лет.

Ma famille possède cette terre depuis plus de cent ans.

Моя семья владеет этой землёй уже более ста лет.

Il y a cent ans, ce lieu était sur la ligne de front.

Почти сто лет назад эта речушка была линией фронта.

Parfois on dirait que c'était il y a cent ans.

Иногда кажется что это было сто лет назад.

Voilà plus de cent ans que le cinéma existe.

Ведь кино существует уже больше сотни лет.

Le cinéma existe depuis plus de cent ans.

Кинофильмы существуют уже более сотни лет.

Il y a cent ans, j'aurais été traité comme un légume.

Сто лет назад со мной бы обращались как с овощем.

Il y a cent ans, une révolte populaire chassa la monarchie russe.

Сто лет назад народное восстание привело к падению российской монархии.

Il y a cent ans, l'industrie y était florissante.

А сто лет назад это была процветающая отрасль.

De son grand prestige et tradition conquis plus de cent ans d'histoire.

С его большим авторитетом и традиции выиграл более чем ста лет истории.

La vermiculite est utilisée dans la culture des cultures depuis plus de cent ans.

Вермикулит применяют при возделывании культурных растений уже более ста лет.

Une plante de ginseng peut vivre plus de cent ans.

Некоторые деревья гинкго могут жить более чем до ста лет.

Plus de cent ans se sont écoulés depuis l'apparition des premières automobiles.

Со времён появления первого автомобиля прошло более ста лет.

Depuis plus de cent ans, le papier est interdit.

Более ста лет книга находилась под запретом.

La chapelle fut édifiée environ cent ans plus tard.

Часовня была построена около ста лет спустя.

Cette décoration est pertinente depuis plus de cent ans.

Эта расцветка является актуальной уже более ста лет.

Une guerre de plus de cent ans ne prendra pas fin sans de douloureux compromis.

Длящаяся более ста лет война не может быть закончена без болезненных компромиссов.

Pendant près de cent ans, la maison est habitée par leurs descendants.

В течение ста лет дом оставался в руках его потомков.

Cela fait plus de cent ans que je n'ai plus d'habitants.

Теперь уже больше ста лет в городе нет жителей.

Depuis plus de cent ans, nous sommes fidèles à notre idée de base.

Вот уже более ста лет мы остаемся верны нашей концепции.

Возможно неприемлемое содержание

Примеры предназначены только для помощи в переводе искомых слов и выражений в различных контекстах. Мы не выбираем и не утверждаем примеры, и они могут содержать неприемлемые слова или идеи. Пожалуйста, сообщайте нам о примерах, которые, на Ваш взгляд, необходимо исправить или удалить. Грубые или разговорные переводы обычно отмечены красным или оранжевым цветом.

Зарегистрируйтесь, чтобы увидеть больше примеров. Это просто и бесплатно

Ничего не найдено для этого значения.

Операторы

Оператором называется нечто, принимающее одно или более значений (или выражений, если говорить на жаргоне программирования), и вычисляющее новое значение (так, всю конструкцию можно рассматривать как выражение).

Операторы можно сгруппировать по количеству принимаемых ими значений. Унарные операторы принимают только одно значение, например, ! (оператор логического отрицания) или ++ (инкремент). Бинарные операторы принимают два значения; это, например, знакомые всем арифметические операторы + (плюс) и - (минус), бо́льшая часть поддерживаемых в PHP операторов входит в эту категорию. И на последок, существует всего один тернарный оператор, ? : , принимающий три значения, обычно о нём говорят просто — «тернарный оператор» (хотя, возможно, более точным названием было бы «условный оператор»).

Весь список PHP-операторов перечислен в разделе «Приоритет оператора». В этом разделе также описан порядок выполнения операторов и их ассоциативность, которые точно определяют, как вычисляются выражения с несколькими разными операторами.

User Contributed Notes 9 notes

19 years ago

of course this should be clear, but i think it has to be mentioned espacially:

AND is not the same like &&

the second
a and (b or c)

'cause || has got a higher priority than and, but less than &&

of course, using always [ && and || ] or [ AND and OR ] would be okay, but than you should at least respect the following:

the first code will set $a to the result of the comparison $b with $c, both have to be true, while the second code line will set $a like $b and THAN - after that - compare the success of this with the value of $c

maybe usefull for some tricky coding and helpfull to prevent bugs 😀

3 years ago

Operator are used to perform operation.

Operator are mainly divided by three groups.
1.Uniary Operators that takes one values
2.Binary Operators that takes two values
3.ternary operators that takes three values

Operator are mainly divided by three groups that are totally seventeen types.
1.Arithmetic Operator
+ = Addition
- = Subtraction
* = Multiplication
/ = Division
% = Modulo
** = Exponentiation

2.Assignment Operator
= null coalescing

14.Clone new Operator
clone new = clone new

15.yield from Operator

yield from = yield from

16.yield Operator
yield = yield

17.print Operator
print = print

22 years ago

Other Language books' operator precedence section usually include "(" and ")" - with exception of a Perl book that I have. (In PHP "<" and ">" should also be considered also). However, PHP Manual is not listed "(" and ")" in precedence list. It looks like "(" and ")" has higher precedence as it should be.

Note: If you write following code, you would need "()" to get expected value.

$bar = true ;
$str = "TEST" . ( $bar ? 'true' : 'false' ) . "TEST" ;
?>

Without "(" and ")" you will get only "true" in $str.
(PHP4.0.4pl1/Apache DSO/Linux, PHP4.0.5RC1/Apache DSO/W2K Server)
It's due to precedence, probably.

15 years ago

The variable symbol '$' should be considered as the highest-precedence operator, so that the variable variables such as $$a[0] won't confuse the parser. [http://www.php.net/manual/en/language.variables.variable.php]

4 years ago

If you use "AND" and "OR", you'll eventually get tripped up by something like this:

$this_one = true ;
$that = false ;
$truthiness = $this_one and $that ;
?>

Want to guess what $truthiness equals?

If you said "false" . it's wrong!

"$truthiness" above has the value "true". Why? "=" has a higher precedence than "and". The addition of parentheses to show the implicit order makes this clearer:

( $truthiness = $this_one ) and $that ;
?>

If you used "&&" instead of and in the first code example, it would work as expected and be "false".

This also works to get the correct value, as parentheses have higher precedence than " default">$truthiness = ( $this_one and $that );
?>

16 years ago

Note that in php the ternary operator ?: has a left associativity unlike in C and C++ where it has right associativity.

You cannot write code like this (as you may have accustomed to in C/C++):

$a = 2 ;
echo (
$a == 1 ? 'one' :
$a == 2 ? 'two' :
$a == 3 ? 'three' :
$a == 4 ? 'four' : 'other' );
echo "\n" ;
// prints 'four'
?>

You need to add brackets to get the results you want:

echo ( $a == 1 ? 'one' :
( $a == 2 ? 'two' :
( $a == 3 ? 'three' :
( $a == 4 ? 'four' : 'other' ) ) ) );
echo "\n" ;
//prints 'two'
?>

16 years ago

The scope resolution operator . which is missing from the list above, has higher precedence than [], and lower precedence than 'new'. This means that self::$array[$var] works as expected.

18 years ago

A quick note to any C developers out there, assignment expressions are not interpreted as you may expect - take the following code ;-

$a =array( 1 , 2 , 3 );
$b =array( 4 , 5 , 6 );
$c = 1 ;

print_r ( $a ) ;
?>

This will output;-
Array ( [0] => 1 [1] => 6 [2] => 3 )
as if the code said;-
$a[1]=$b[2];

Under a C compiler the result is;-
Array ( [0] => 1 [1] => 5 [2] => 3 )
as if the code said;-
$a[1]=$b[1];

It would appear that in php the increment in the left side of the assignment is processed prior to processing the right side of the assignment, whereas in C, neither increment occurs until after the assignment.

2 years ago

A variable is a container that contain different types of data and the operator operates a variable correctly.

  • Справочник языка
    • Основы синтаксиса
    • Типы
    • Переменные
    • Константы
    • Выражения
    • Операторы
    • Управляющие конструкции
    • Функции
    • Классы и объекты
    • Пространства имён
    • Перечисления
    • Ошибки
    • Исключения
    • Fibers
    • Генераторы
    • Атрибуты
    • Объяснение ссылок
    • Предопределённые переменные
    • Предопределённые исключения
    • Встроенные интерфейсы и классы
    • Предопределённые атрибуты
    • Контекстные опции и параметры
    • Поддерживаемые протоколы и обёртки
    • Copyright © 2001-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *