Плохие типы операндов для двоичного оператора '^' [duplicate]

он работал для меня на 000webhost, выполнив следующие действия:

$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: ". $from. "\r\n";
$headers .= "Reply-To: ". $from. "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
$headers .= "X-Priority: 1" . "\r\n"; 

Введите адрес электронной почты при отправке электронной почты

mail('email@gmail.com', $subject, $message, $headers)

Используйте '', а не ""

Этот код работает, но письмо было получено с задержкой в ​​полчаса

228
задан Nayuki 28 February 2016 в 04:06
поделиться

16 ответов

Это побитовый оператор XOR .

17
ответ дан AraK 22 August 2018 в 16:11
поделиться

Как уже было сказано другим ответом (ответами), это «исключительный или» (XOR) оператор . Для получения дополнительной информации о битовых операторах в Java см.: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html

6
ответ дан Bart Kiers 22 August 2018 в 16:11
поделиться

Ссылка AraK указывает на определение исключительного или, что объясняет, как эта функция работает для двух логических значений.

Недостающая часть информации заключается в том, как это относится к двум целым числам (или значениям целочисленного типа ). Побитовое исключение - или применяется к парам соответствующих двоичных цифр в двух числах, а результаты повторно собраны в целочисленный результат.

Чтобы использовать ваш пример:

  • Бинарное представление 5 равно 0101.
  • Бинарное представление 4 равно 0100.

Простым способом определения побитового XOR является утверждение, что результат имеет 1 в каждое место, где два входных числа отличаются.

С 4 и 5 единственное различие находится на последнем месте; поэтому

0101 ^ 0100 = 0001 (5 ^ 4 = 1).

6
ответ дан Carl Smotricz 22 August 2018 в 16:11
поделиться

Побитовое XOR, Java не имеет оператора экспоненции, вам придется использовать Math.pow() вместо этого.

32
ответ дан Dan Dyer 22 August 2018 в 16:11
поделиться

Это побитовый оператор xor в java, который приводит к 1 для разного значения (т. е. 1 ^ 0 = 1) и 0 для одного значения (т. е. 0 ^ 0 = 0).

2
ответ дан GuruKulki 22 August 2018 в 16:11
поделиться

Это потому, что вы используете оператор xor.

В java или практически любом другом языке ^ побитообразно xor, поэтому, конечно,

10 ^ 1 = 11. больше информации о побитовых операторах

Интересно, как Java и C # не имеют оператора мощности.

6
ответ дан jcao219 22 August 2018 в 16:11
поделиться
7
ответ дан Luis 22 August 2018 в 16:11
поделиться

Как уже отмечалось многими, это оператор XOR . Многие люди также уже указали, что если вы хотите повысить степень экспансии, вам нужно использовать Math.pow .

Но я думаю, что также полезно отметить, что ^ - это всего лишь один семейства операторов, которые все вместе известны как побитовые операторы:

Operator    Name         Example     Result  Description
a & b       and          3 & 5       1       1 if both bits are 1.
a | b       or           3 | 5       7       1 if either bit is 1.
a ^ b       xor          3 ^ 5       6       1 if both bits are different.
~a          not          ~3          -4      Inverts the bits.
n << p      left shift   3 << 2      12      Shifts the bits of n left p positions. Zero bits are shifted into the low-order positions.
n >> p      right shift  5 >> 2      1       Shifts the bits of n right p positions. If n is a 2's complement signed number, the sign bit is shifted into the high-order positions.
n >>> p     right shift  -4 >>> 28   15      Shifts the bits of n right p positions. Zeros are shifted into the high-order positions.

Из здесь .

Эти операторы могут пригодиться, когда вам нужно читать и записывать в целые числа, где отдельные биты должны интерпретироваться как флаги, или когда определенный диапазон бит в целочисленном значении имеет особое значение, и вы хотите извлечь только те из них. Вы можете делать много ежедневных программ, не требуя при этом использования этих операторов, но если вам когда-либо придется работать с данными на уровне бит, то хорошее знание этих операторов неоценимо.

130
ответ дан Mark Byers 22 August 2018 в 16:11
поделиться

^ двоичный (как в base-2) xor, а не возведение в степень (которое недоступно в качестве Java-оператора). Для экспоненциальности см. Java.lang.Math.pow ().

2
ответ дан Ming-Tang 22 August 2018 в 16:11
поделиться

На других языках, таких как Python, вы можете сделать 10 ** 2 = 100, попробуйте.

1
ответ дан mkotechno 22 August 2018 в 16:11
поделиться

Это побитовый оператор xor в java, который приводит к 1 для разного значения бит (т. е. 1 ^ 0 = 1) и 0 для одного значения бита (т. е. 0 ^ 0 = 0), когда число записывается в двоичной форме .

ex: -

Чтобы использовать ваш пример:

Бинарное представление 5 равно 0101. Бинарное представление 4 равно 0100.

Простым способом определения Побитового XOR является утверждение, что результат имеет 1 в каждом месте, где два входных числа отличаются.

0101 ^ 0100 = 0001 (5 ^ 4 = 1).

7
ответ дан Nikhil Kumar 22 August 2018 в 16:11
поделиться

Оператор ^ в Java

^ в Java является оператором исключительного или («xor»).

Возьмем 5^6 в качестве примера:

(decimal)    (binary)
     5     =  101
     6     =  110
------------------ xor
     3     =  011

Это таблица истинности побитового ( JLS 15.22.1 ) и логического ( JLS 15.22.2 ) xor:

^ | 0 1      ^ | F T
--+-----     --+-----
0 | 0 1      F | F T
1 | 1 0      T | T F

Более просто, вы можете также думать о xor как «это или , но не оба !».

См. также


Экспоненциальность в Java

Что касается целочисленного возведения в степень, к сожалению, Java не имеет такого оператора. Вы можете использовать double Math.pow(double, double) (при необходимости приведя результат к int).

Вы также можете использовать традиционный трюк для смещения бит для вычисления нескольких степеней по два. То есть (1L << k) равно двум k -й степени для k=0..63.

См. Также


Объединить примечание : этот ответ был объединен с другим вопросом, в котором было намерение использовать экспоненциальность для преобразования string "8675309" - int, не используя Integer.parseInt в качестве упражнения программирования (^ теперь означает возведение в степень). Целью OP было вычислить 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309; в следующей части этого ответа указывается, что для этой задачи не требуется возведение в степень.

Схема Хорнера

. При обращении к вашему конкретному нужно, не нужно вычислять различные степени 10. Вы можете использовать так называемую схему Хорнера , которая не только проста, но и эффективна.

Поскольку вы делаете это как личное упражнение, я не буду давать Java-код, но вот основная идея:

8675309 = 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0
        = (((((8*10 + 6)*10 + 7)*10 + 5)*10 + 3)*10 + 0)*10 + 9

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

В виде таблицы:

step   result  digit  result*10+digit
   1   init=0      8                8
   2        8      6               86
   3       86      7              867
   4      867      5             8675
   5     8675      3            86753
   6    86753      0           867530
   7   867530      9          8675309=final
365
ответ дан Pang 22 August 2018 в 16:11
поделиться
  • 1
    просто чтобы добавить к этому ответу, функция, которую ищет OP, вероятно, Math.pow (10, 1) – tjohns20 20 April 2010 в 03:54

Как говорили другие, это побитовое XOR. Если вы хотите поднять число до заданной мощности, используйте Math.pow(a , b) , где a - число, а b - мощность.

14
ответ дан rudolph9 22 August 2018 в 16:11
поделиться

Правило оператора XOR =>

0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1

Двоичное представление 4, 5 и 6:

4 = 1 0 0 
5 = 1 0 1
6 = 1 1 0

теперь выполняет операцию XOR на 5 и 4:

     5 ^ 4 => 1  0  1   (5)
              1  0  0   (4)
            ----------
              0  0  1   => 1

Аналогично,

5 ^ 5 => 1   0   1    (5)
         1   0   1    (5)
       ------------
         0   0   0   => (0)


5 ^ 6 => 1   0   1  (5)
         1   1   0  (6)
        -----------
         0   1   1  => 3
5
ответ дан Sachin Ambalkar 22 August 2018 в 16:11
поделиться

Многие многие уже объяснили, что это такое и как его можно использовать, но помимо очевидного вы можете использовать этот оператор для выполнения многих трюков программирования, таких как

  • XORing всех элементы в булевом массиве скажут вам, имеет ли массив нечетное число истинных элементов
  • . Если у вас есть массив со всеми номерами, повторяющий ровное число раз, кроме одного, которое повторяется нечетное количество раз, вы можете обнаружить, что с помощью XORing всех элементов.
  • Изменение значений без использования временной переменной
  • Поиск отсутствующего числа в диапазоне от 1 до n
  • Базовая проверка данных, передаваемых по сети.

Много таких трюков можно сделать, используя бит-мудрые операторы, интересную тему для изучения.

11
ответ дан user207421 22 August 2018 в 16:11
поделиться

Это оператор XOR. Это используется для выполнения операций с битами по номерам. Он имеет такое поведение, что, когда вы выполняете операцию xor на одних и тех же битах, скажите 0 XOR 0/1 XOR 1, результат равен 0. Но если какой-либо из бит отличается от результата, тогда результат равен 1. Итак, когда вы сделали 5 ^ 3, тогда вы могут смотреть на эти числа 5, 6 в их двоичных формах и, следовательно, выражение становится (101) XOR (110), которое дает результат (011), десятичное представление которого равно 3.

1
ответ дан Yug Singh 22 August 2018 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: