Heim Backend-Entwicklung PHP-Tutorial Bitweise PHP-Operatoren

Bitweise PHP-Operatoren

Jul 30, 2016 pm 01:30 PM
function nbsp quot the

Bitweise Operatoren ermöglichen die Auswertung und Manipulation bestimmter Bits in einer Ganzzahl.

位运算符
例子 名称 结果
$a & $b</codefira></span></td> <td>And(按位与)</td> <td>将把 <var>$a</var> 和 <var>$b</var> 中都为 1 的位设为 1。</td> </tr> <tr> <td><span><codefira mono code pro word-wrap:break-word>$a | $b</codefira></span></td> <td>Or(按位或)</td> <td>将把 <var>$a</var> 和 <var>$b</var> 中任何一个为 1 的位设为 1。</td> </tr> <tr> <td><span><codefira mono code pro word-wrap:break-word>$a ^ $b</codefira></span></td> <td>Xor(按位异或)</td> <td>将把 <var>$a</var> 和 <var>$b</var> 中一个为 1 另一个为 0 的位设为 1。</td> </tr> <tr> <td><span><codefira mono code pro word-wrap:break-word>~ $a</codefira></span></td> <td>Not(按位取反)</td> <td>将 <var>$a</var> 中为 0 的位设为 1,反之亦然。</td> </tr> <tr> <td><span><codefira mono code pro word-wrap:break-word>$a << $bShift left(左移)$a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $b</codefira></span></td> <td>Shift right(右移)</td> <td>将 <var>$a</var> 中的位向右移动 <var>$b</var> 次(每一次移动都表示“除以 2”)。</td> </tr> </tbody> </table> <p>Verschiebung ist eine mathematische Operation in PHP. In eine beliebige Richtung herausbewegte Bits werden verworfen. Beim Verschieben nach links wird die rechte Seite mit Nullen aufgefüllt und das Vorzeichenbit wird weggeschoben, d. h. das Vorzeichen bleibt nicht erhalten. Beim Verschieben nach rechts wird die linke Seite mit Vorzeichenbits aufgefüllt, wodurch das Vorzeichen erhalten bleibt. </p> <p>Verwenden Sie Klammern, um die gewünschte Priorität sicherzustellen. Zum Beispiel <span>$a & $b == true</span> führt zuerst einen Vergleich und dann ein bitweises UND durch, während <span>($a & $b) == true</span> zuerst ein bitweises UND und dann einen Vergleich durchführt. </p> <p>Achten Sie auf die Datentypkonvertierung. Wenn sowohl das linke als auch das rechte Argument Zeichenfolgen sind, arbeiten die bitweisen Operatoren mit den ASCII-Werten der Zeichen. </p> <p></p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">PHP 的 ini 设定 error_reporting 使用了按位的值, 提供了关闭某个位的真实例子。要显示除了提示级别 之外的所有错误,php.ini 中是这样用的: &lt;span&gt;&lt;codefira mono code pro word-wrap:break-word&gt;E_ALL &amp; ~E_NOTICE&lt;/codefira&gt;&lt;/span&gt;</pre><div class="contentsignin">Nach dem Login kopieren</div></div> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">具体运作方式是先取得 E_ALL 的值: &lt;span&gt;00000000000000000111011111111111&lt;/span&gt; 再取得 E_NOTICE 的值: &lt;span&gt;00000000000000000000000000001000&lt;/span&gt; 然后通过 &lt;span&gt;~&lt;/span&gt; 将其取反: &lt;span&gt;11111111111111111111111111110111&lt;/span&gt; 最后再用按位与 AND(&amp;)得到两个值中都设定了(为 1)的位: &lt;span&gt;00000000000000000111011111110111&lt;/span&gt;</pre><div class="contentsignin">Nach dem Login kopieren</div></div> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">另外一个方法是用按位异或 XOR(&lt;span&gt;^&lt;/span&gt;)来取得只在 其中一个值中设定了的位: &lt;span&gt;&lt;codefira mono code pro word-wrap:break-word&gt;E_ALL ^ E_NOTICE&lt;/codefira&gt;&lt;/span&gt;</pre><div class="contentsignin">Nach dem Login kopieren</div></div> <p></p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">error_reporting 也可用来演示怎样置位。只显示错误和可恢复 错误的方法是: &lt;span&gt;&lt;codefira mono code pro word-wrap:break-word&gt;E_ERROR | E_RECOVERABLE_ERROR&lt;/codefira&gt;&lt;/span&gt;</pre><div class="contentsignin">Nach dem Login kopieren</div></div> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">也就是将 E_ERROR &lt;span&gt;00000000000000000000000000000001&lt;/span&gt; 和 E_RECOVERABLE_ERROR &lt;span&gt;00000000000000000001000000000000&lt;/span&gt; 用按位或 OR(&lt;span&gt;|&lt;/span&gt;)运算符来取得在任何一个值中被置位的结果: &lt;span&gt;00000000000000000001000000000001&lt;/span&gt;</pre><div class="contentsignin">Nach dem Login kopieren</div></div> <p></p> <p><span>Beispiel Nr. 1 AND-, OR- und XOR-Bits von ganzen Zahlen Operatoren</span></p> <p></p> <p><codefira mono code pro display:block><codefira mono code pro word-wrap:break-word display:block><span><span><?php<br></span><span>/*<br> * Ignore the top section,<br> * it is just formatting to make output clearer.<br> */<br></span><span>$format </span><span>= </span><span>'(%1d = %1b) = (%2d = %2b)'<br> </span><span>. </span><span>' %3$s (%4d = %4b)' </span><span>. </span><span>"n"</span><span>;<br>echo <<<EOH<br></span><span> --------- --------- -- ---------<br> result value op test<br> --------- --------- -- ---------<br></span><span>EOH;<br></span><span>/*<br> * Here are the examples.<br> */<br></span><span>$values </span><span>= array(</span><span>0</span><span>, </span><span>1</span><span>, </span><span>2</span><span>, </span><span>4</span><span>, </span><span>8</span><span>);<br></span><span>$test </span><span>= </span><span>1 </span><span>&#43; </span><span>4</span><span>;<br>echo </span><span>"n Bitwise AND n"</span><span>;<br>foreach (</span><span>$values </span><span>as </span><span>$value</span><span>) {<br> </span><span>$result </span><span>= </span><span>$value </span><span>& </span><span>$test</span><span>;<br> </span><span>printf</span><span>(</span><span>$format</span><span>, </span><span>$result</span><span>, </span><span>$value</span><span>, </span><span>'&'</span><span>, </span><span>$test</span><span>);<br>}<br>echo </span><span>"n Bitwise Inclusive OR n"</span><span>;<br>foreach (</span><span>$values </span><span>as </span><span>$value</span><span>) {<br> </span><span>$result </span><span>= </span><span>$value </span><span>| </span><span>$test</span><span>;<br> </span><span>printf</span><span>(</span><span>$format</span><span>, </span><span>$result</span><span>, </span><span>$value</span><span>, </span><span>'|'</span><span>, </span><span>$test</span><span>);<br>}<br>echo </span><span>"n Bitwise Exclusive OR (XOR) n"</span><span>;<br>foreach (</span><span>$values </span><span>as </span><span>$value</span><span>) {<br> </span><span>$result </span><span>= </span><span>$value </span><span>^ </span><span>$test</span><span>;<br> </span><span>printf</span><span>(</span><span>$format</span><span>, </span><span>$result</span><span>, </span><span>$value</span><span>, </span><span>'^'</span><span>, </span><span>$test</span><span>);<br>}<br></span><span>?></span></span></codefira></codefira></p><?php < br></p><p>/*<br> * Ignorieren Sie den oberen Abschnitt,<br> * es handelt sich lediglich um eine Formatierung, um die Ausgabe klarer zu machen.<br> */<br><p></p>$format </p><p>= <p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> --------- --------- -- --------- result value op test --------- --------- -- --------- Bitwise AND ( 0 = 0000) = ( 0 = 0000) &amp; ( 5 = 0101) ( 1 = 0001) = ( 1 = 0001) &amp; ( 5 = 0101) ( 0 = 0000) = ( 2 = 0010) &amp; ( 5 = 0101) ( 4 = 0100) = ( 4 = 0100) &amp; ( 5 = 0101) ( 0 = 0000) = ( 8 = 1000) &amp; ( 5 = 0101) Bitwise Inclusive OR ( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101) ( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101) ( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101) ( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101) (13 = 1101) = ( 8 = 1000) | ( 5 = 0101) Bitwise Exclusive OR (XOR) ( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101) ( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101) ( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101) ( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101) (13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101) </pre><div class="contentsignin">Nach dem Login kopieren</div></div>'(%1$2d = %1$04b) = (%2$2d = %2$04b)'<br> </p></p> </p>' %3$s (%4$2d = %4$04b)' <p><p>"n"<span></span>;<br>echo <&lt ; <EOH<br></p><🎜> --------- --------- -- ---------<br> Ergebniswert op test< br > --------- --------- -- ---------<br><🎜><🎜>EOH;<br><🎜><🎜 > /*<br> * Hier sind die Beispiele.<br> */<br><🎜><🎜>$values ​​​​<🎜><🎜>= array(<🎜><🎜>0<🎜><🎜 > , <🎜><🎜>1<🎜><🎜>, <🎜><🎜>2<🎜><🎜>, <🎜><🎜>4<🎜><🎜>, <🎜><🎜> 8 <🎜><🎜>);<br><🎜><🎜>$test <🎜><🎜>= <🎜><🎜>1 <🎜><🎜>+ <🎜><🎜>4<🎜 > <🎜>;<br>echo <🎜><🎜>"n Bitwise AND n"<🎜><🎜>;<br>foreach (<🎜><🎜>$values ​​​​<🎜><🎜>as <🎜> <🎜>$value<🎜><🎜>) {<br> <🎜><🎜>$result <🎜><🎜>= <🎜><🎜>$value <🎜><🎜>& < 🎜>< 🎜>$test<🎜><🎜>;<br> <🎜><🎜>printf<🎜><🎜>(<🎜><🎜>$format<🎜><🎜>, <🎜>< 🎜>$ result<🎜><🎜>, <🎜><🎜>$value<🎜><🎜>, <🎜><🎜>'&'<🎜><🎜>, <🎜><🎜>$test <🎜> <🎜>);<br>><br>echo <🎜><🎜>"n Bitwise Inclusive OR n"<🎜><🎜>;<br>foreach (<🎜><🎜>$values ​​​​<🎜>< 🎜>as <🎜><🎜>$value<🎜><🎜>) {<br> <🎜><🎜>$result <🎜><🎜>= <🎜><🎜>$value <🎜><🎜 >|. 🎜><🎜>$result<🎜><🎜>, <🎜><🎜>$value<🎜><🎜>, <🎜><🎜>'|'<🎜><🎜 >, <🎜><🎜 >$test<🎜><🎜>);<br>><br>echo <🎜><🎜>"n Bitweises Exklusiv-ODER (XOR) n"<🎜><🎜>;< br>foreach (<🎜> <🎜>$values ​​​​<🎜><🎜>as <🎜><🎜>$value<🎜><🎜>) {<br> <🎜><🎜>$result <🎜 ><🎜>= <🎜>< 🎜>$value <🎜><🎜>^ <🎜><🎜>$test<🎜><🎜>;<br> format<🎜><🎜>, <🎜>< 🎜>$result<🎜><🎜>, <🎜><🎜>$value<🎜><🎜>, <🎜><🎜>'^'<🎜> <🎜>, <🎜><🎜>$test <🎜><🎜>);<br>}<br><🎜><🎜>?>Die obige Routine wird Ausgabe: Beispiel #2 String-XOR-Operator<p></p> <p><codefira mono code pro word-wrap:break-word display:block><span><span><?php<br></span><span>echo </span><span>12 </span><span>^ </span><span>9</span><span>; </span><span>// Outputs '5'<br></span><span>echo </span><span>"12" </span><span>^ </span><span>"9"</span><span>; </span><span>// Outputs the Backspace character (ascii 8)<br> // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8<br></span><span>echo </span><span>"hallo" </span><span>^ </span><span>"hello"</span><span>; </span><span>// Outputs the ascii values #0 #4 #0 #0 #0<br> // 'a' ^ 'e' = #4<br></span><span>echo </span><span>2 </span><span>^ </span><span>"3"</span><span>; </span><span>// Outputs 1<br> // 2 ^ ((int)"3") == 1<br></span><span>echo </span><span>"2" </span><span>^ </span><span>3</span><span>; </span><span>// Outputs 1<br> // ((int)"2") ^ 3 == 1<br></span><span>?></span></span></codefira></p> <p></p> <p><span>Beispiel #3 Verschiebung einer Ganzzahl </span></p> <p></p> <p><codefira mono code pro word-wrap:break-word display:block><span><span><?php<br></span><span>/*<br> * Hier sind die Beispiele.<br> */<br></span> <span>echo </span><span>"n--- BIT-SHIFT-RECHTS-AUF-POSITIVE-GANZANZAHLEN---n"</span><span>;<br></span><span>$val </span><span> = </span><span>4</span><span>;<br></span><span>$places </span><span>= </span><span>1</span><span>;<br> </span><span>$res </span><span>= </span><span>$val </span><span>>> </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'>>'</span><span>, </span><span>$places</span><span>, </span><span>'Kopie des Vorzeichenbits nach links verschoben'</span><span>);<br></span><span>$val </span><span>= </span><span>4</span><span>;<br></span><span>$places </span><span>= </span><span>2</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span>>> </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'>>'</span><span>, </span><span>$places</span><span>);<br> </span><span>$val </span><span>= </span><span>4</span><span>;<br></span><span>$places </span><span>= </span> <span>3</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span>>> </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'>>'</span><span>, </span><span>$places</span><span>, </span><span>'Bits verschieben sich nach rechts'</span><span>);<br></span><span>$val </span><span>= </span><span>4</span><span>;<br></span><span>$places </span><span>= </span><span>4</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span>>> </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'>>'</span><span>, </span><span>$places</span><span>, </span><span>'dasselbe Ergebnis wie oben; kann nicht über 0 hinaus verschoben werden'</span><span>);<br>echo </span><span>"n--- BIT SHIFT RECHTS AUF NEGATIVEN GANZANZAHLEN ---n"</span><span>;<br></span><span>$val </span><span>= -</span><span>4</span><span>;<br></span><span>$places </span><span>= </span><span>1</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span>>> </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'>>'</span><span>, </span><span>$places</span><span>, </span><span>'Kopie des Vorzeichenbits nach links verschoben'</span><span>);<br></span><span>$val </span><span>= -</span><span>4</span><span>;<br></span><span>$places </span><span>= </span><span>2</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span>>> </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'>>'</span><span>, </span><span>$places</span><span>, </span><span>'Bits verschieben sich nach rechts'</span><span>);<br></span><span>$val </span><span>= -</span><span>4</span><span>; <br></span><span>$places </span><span>= </span><span>3</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span>>> </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'>>'</span><span>, </span><span>$places</span><span>, </span><span>'dasselbe Ergebnis wie oben; kann nicht über -1 hinaus verschoben werden'</span><span>);<br>echo </span><span>"n--- BIT SHIFT LEFT ON POSITIVE INTEGERS ---n"</span><span>;<br></span><span>$val </span><span>= </span><span>4</span><span>;<br></span><span>$places </span><span>= </span><span>1</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span><< </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span><span>$val</span><span>, </span><span> '<<'</span><span>, </span><span>$places</span><span>, </span><span>'Nullen füllen die rechte Seite ein'</span><span>);<br></span><span>$val </span><span>= </span><span>4</span><span>;<br></span><span>$places </span><span>= ( </span><span>PHP_INT_SIZE </span><span>* </span><span>8</span><span>) - </span><span>4</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span><< </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'<<'</span><span>, </span><span>$places</span><span>);<br> </span><span>$val </span><span>= </span><span>4</span><span>;<br></span><span>$places </span><span>= (</span><span>PHP_INT_SIZE </span><span>* </span><span>8</span><span>) - </span><span>3</span><span>;<br></span><span> $res </span><span>= </span><span>$val </span><span><< </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'<<'</span><span>, </span><span>$places</span><span>, </span><span>'Vorzeichenbits werden nach außen verschoben'</span><span>);<br></span><span>$val </span><span>= </span><span>4</span><span>;<br></span><span>$places </span><span>= (</span><span>PHP_INT_SIZE </span><span>* </span><span>8</span><span>) - </span> <span>2</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span><< </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'<<'</span><span>, </span><span>$places</span><span>, </span><span>'Bits shift out left side'</span><span>);<br>echo </span><span>"n--- BIT SHIFT LEFT ON NEGATIVE INTEGERS ---n"</span><span>; <br></span><span>$val </span><span>= -</span><span>4</span><span>;<br></span><span>$places </span><span> = </span><span>1</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span><&lt ; </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'<<'</span><span>, </span><span>$places</span><span>, </span><span>'Nullen füllen die rechte Seite ein'</span><span>);<br></span><span>$val </span><span>= -</span><span>4</span><span>; <br></span><span>$places </span><span>= (</span><span>PHP_INT_SIZE </span><span>* </span><span>8</span><span>) - </span><span>3</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span><< </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'<<'</span><span>, </span><span>$places</span><span>);<br> </span><span>$val </span><span>= -</span><span>4</span><span>;<br></span><span>$places </span><span>= (</span><span>PHP_INT_SIZE </span><span>* </span><span>8</span><span>) - </span><span>2</span><span>;<br></span><span>$res </span><span>= </span><span>$val </span><span><< </span><span>$places</span><span>;<br></span><span>p</span><span>(</span><span>$res</span><span>, </span> <span>$val</span><span>, </span><span>'<<'</span><span>, </span><span>$places</span><span>, </span><span>'Bits werden nach links verschoben, einschließlich Vorzeichenbit'</span><span>);<br></span><span>/*<br> * Diesen unteren Abschnitt ignorieren,<br> * es dient lediglich der Formatierung Machen Sie die Ausgabe klarer.<br> */<br></span><span>Funktion </span><span>p</span><span>(</span><span>$res</span><span>, </span><span>$val</span><span>, </span><span>$op</span><span>, </span><span>$places</span><span>, </span><span>$ note </span><span>= </span><span>''</span><span>) {<br>    </span><span>$format </span><span>= </span><span>'% 0' </span><span>. (</span><span>PHP_INT_SIZE </span><span>* </span><span>8</span><span>) . </span><span>"Milliarden"</span><span>;<br> </span><span>printf</span><span>(</span><span>"Expression: %d = %d %s %d\n"</span><span>, </span><span>$res</span><span>, </span><span>$val</span><span>, </span><span>$op</span><span>, </span><span>$places</span><span>);<br> echo </span><span>" Decimal:\n"</span><span>;<br> </span><span>printf</span><span>(</span><span>" val=%d\n"</span><span>, </span><span>$val</span><span>);<br> </span><span>printf</span><span>(</span><span>" res=%d\n"</span><span>, </span><span>$res</span><span>);<br> echo </span><span>" Binary:\n"</span><span>;<br> </span><span>printf</span><span>(</span><span>' val=' </span><span>. </span><span>$format</span><span>, </span><span>$val</span><span>);<br> </span><span>printf</span><span>(</span><span>' res=' </span><span>. </span><span>$format</span><span>, </span><span>$res</span><span>);<br> if (</span><span>$note</span><span>) {<br> echo </span><span>" NOTE: </span><span>$note</span><span>\n"</span><span>;<br> }<br> echo </span><span>"\n"</span><span>;<br>}<br></span><span>?></span></span></codefira></p> <p></p> <p>以上例程在 32 位机器上的输出:</p> <p></p> <p></p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">--- BIT SHIFT RIGHT ON POSITIVE INTEGERS --- Expression: 2 = 4 &gt;&gt; 1 Decimal: val=4 res=2 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000010 NOTE: copy of sign bit shifted into left side Expression: 1 = 4 &gt;&gt; 2 Decimal: val=4 res=1 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000001 Expression: 0 = 4 &gt;&gt; 3 Decimal: val=4 res=0 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000000 NOTE: bits shift out right side Expression: 0 = 4 &gt;&gt; 4 Decimal: val=4 res=0 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000000 NOTE: same result as above; can not shift beyond 0 --- BIT SHIFT RIGHT ON NEGATIVE INTEGERS --- Expression: -2 = -4 &gt;&gt; 1 Decimal: val=-4 res=-2 Binary: val=11111111111111111111111111111100 res=11111111111111111111111111111110 NOTE: copy of sign bit shifted into left side Expression: -1 = -4 &gt;&gt; 2 Decimal: val=-4 res=-1 Binary: val=11111111111111111111111111111100 res=11111111111111111111111111111111 NOTE: bits shift out right side Expression: -1 = -4 &gt;&gt; 3 Decimal: val=-4 res=-1 Binary: val=11111111111111111111111111111100 res=11111111111111111111111111111111 NOTE: same result as above; can not shift beyond -1 --- BIT SHIFT LEFT ON POSITIVE INTEGERS --- Expression: 8 = 4 &lt;&lt; 1 Decimal: val=4 res=8 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000001000 NOTE: zeros fill in right side Expression: 1073741824 = 4 &lt;&lt; 28 Decimal: val=4 res=1073741824 Binary: val=00000000000000000000000000000100 res=01000000000000000000000000000000 Expression: -2147483648 = 4 &lt;&lt; 29 Decimal: val=4 res=-2147483648 Binary: val=00000000000000000000000000000100 res=10000000000000000000000000000000 NOTE: sign bits get shifted out Expression: 0 = 4 &lt;&lt; 30 Decimal: val=4 res=0 Binary: val=00000000000000000000000000000100 res=00000000000000000000000000000000 NOTE: bits shift out left side --- BIT SHIFT LEFT ON NEGATIVE INTEGERS --- Expression: -8 = -4 &lt;&lt; 1 Decimal: val=-4 res=-8 Binary: val=11111111111111111111111111111100 res=11111111111111111111111111111000 NOTE: zeros fill in right side Expression: -2147483648 = -4 &lt;&lt; 29 Decimal: val=-4 res=-2147483648 Binary: val=11111111111111111111111111111100 res=10000000000000000000000000000000 Expression: 0 = -4 &lt;&lt; 30 Decimal: val=-4 res=0 Binary: val=11111111111111111111111111111100 res=00000000000000000000000000000000 NOTE: bits shift out left side, including sign bit </pre><div class="contentsignin">Nach dem Login kopieren</div></div></p></p><p><p>以上例程在 64 位机器上的输出:</p></p><p><p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">--- BIT SHIFT RIGHT ON POSITIVE INTEGERS --- Expression: 2 = 4 &gt;&gt; 1 Decimal: val=4 res=2 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000010 NOTE: copy of sign bit shifted into left side Expression: 1 = 4 &gt;&gt; 2 Decimal: val=4 res=1 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000001 Expression: 0 = 4 &gt;&gt; 3 Decimal: val=4 res=0 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000000 NOTE: bits shift out right side Expression: 0 = 4 &gt;&gt; 4 Decimal: val=4 res=0 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000000 NOTE: same result as above; can not shift beyond 0 --- BIT SHIFT RIGHT ON NEGATIVE INTEGERS --- Expression: -2 = -4 &gt;&gt; 1 Decimal: val=-4 res=-2 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1111111111111111111111111111111111111111111111111111111111111110 NOTE: copy of sign bit shifted into left side Expression: -1 = -4 &gt;&gt; 2 Decimal: val=-4 res=-1 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1111111111111111111111111111111111111111111111111111111111111111 NOTE: bits shift out right side Expression: -1 = -4 &gt;&gt; 3 Decimal: val=-4 res=-1 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1111111111111111111111111111111111111111111111111111111111111111 NOTE: same result as above; can not shift beyond -1 --- BIT SHIFT LEFT ON POSITIVE INTEGERS --- Expression: 8 = 4 &lt;&lt; 1 Decimal: val=4 res=8 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000001000 NOTE: zeros fill in right side Expression: 4611686018427387904 = 4 &lt;&lt; 60 Decimal: val=4 res=4611686018427387904 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0100000000000000000000000000000000000000000000000000000000000000 Expression: -9223372036854775808 = 4 &lt;&lt; 61 Decimal: val=4 res=-9223372036854775808 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=1000000000000000000000000000000000000000000000000000000000000000 NOTE: sign bits get shifted out Expression: 0 = 4 &lt;&lt; 62 Decimal: val=4 res=0 Binary: val=0000000000000000000000000000000000000000000000000000000000000100 res=0000000000000000000000000000000000000000000000000000000000000000 NOTE: bits shift out left side --- BIT SHIFT LEFT ON NEGATIVE INTEGERS --- Expression: -8 = -4 &lt;&lt; 1 Decimal: val=-4 res=-8 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1111111111111111111111111111111111111111111111111111111111111000 NOTE: zeros fill in right side Expression: -9223372036854775808 = -4 &lt;&lt; 61 Decimal: val=-4 res=-9223372036854775808 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=1000000000000000000000000000000000000000000000000000000000000000 Expression: 0 = -4 &lt;&lt; 62 Decimal: val=-4 res=0 Binary: val=1111111111111111111111111111111111111111111111111111111111111100 res=0000000000000000000000000000000000000000000000000000000000000000 NOTE: bits shift out left side, including sign bit </pre><div class="contentsignin">Nach dem Login kopieren</div></div></p></p></p><p><span>Warning</span><p>不要在 32 位系统下向右移超过 32 位。不要在结果可能超过 32 的情况下左移。使用 gmp 扩展对超出 PHP_INT_MAX 的数&#20540;来进行位操作。</p></p><p>参见 <span>pack()</span>,<span>unpack()</span>,<span>gmp_and()</span>,<span>gmp_or()</span>,<span>gmp_xor()</span>,<span>gmp_testbit()</span> 和 <span>gmp_clrbit()</span>。</p></p><p><span><img src="/static/imghw/default1.png" data-src="http://image.codes51.com/Article/image/20150824/20150824204951_7209.png" class="lazy" alt="add a note" style="max-width:90%" style="max-width:90%"> <small>add a note</small></span><p>User Contributed Notes <span>43 notes</span></p></p><p><p><p><p>up</p><p>down</p><div title="87% like this...">46</p></p><span><span>wbcarts at juno dot com</span></span> ? <div title="2012-05-17 03:52"><span>3 years ago</span></p><p><p><codeFira Mono','Source Code Pro',monospace; word-wrap:break-word; display:block"><span>BITWISE FLAGS für Benutzerdefiniert PHP-Objekte<br>Manchmal benötige ich ein benutzerdefiniertes PHP-Objekt, das mehrere boolesche TRUE- oder FALSE-Werte enthält. Ich könnte für jeden von ihnen problemlos eine Variable einfügen, aber wie immer kann Code ziemlich schnell unübersichtlich werden. Ein intelligenterer Ansatz scheint sogar immer die Antwort zu sein wenn es zunächst übertrieben erscheint.<br>Ich beginne mit einer abstrakten Basisklasse, die eine einzelne Ganzzahlvariable namens $flags enthält. Diese einfache Ganzzahl kann 32 boolesche Werte TRUE oder FALSE enthalten. Eine weitere zu berücksichtigende Sache besteht darin, nur bestimmte BIT-Werte festzulegen, ohne die anderen BITS zu stören – Daher ist in der Klassendefinition die Funktion setFlag($flag, $value) enthalten, die nur das ausgewählte Bit setzt. Hier ist die abstrakte Basisklassendefinition: <br><span><?php<br></span><span># BitwiseFlag.php<br></span><span>abstract class </span><span>BitwiseFlag<br></span><span>{<br>  protected </span><span>$flags</span><span>;<br>  </span><span>/*<br>   * Hinweis: Diese Funktionen sind zur Verhinderung geschützt externer Code<br>   * durch falsches Setzen von BITS. Sehen Sie, wie die Erweiterungsklasse „User“<br>   * damit umgeht.<br>   *<br>   */<br>  </span><span>geschützte Funktion </span><span>isFlagSet</span><span>(</span><span>$flag</span><span>)<br>  {<br>    return ((</span><span>$this</span><span>-><span>flags </span><span>& </span><span>$flag</span><span>) == </span><span>$flag</span><span>);<br>  }<br>  geschützte Funktion </span><span>setFlag</span><span>(</span><span>$flag</span><span>, </span><span>$value</span><span>)<br>  {<br>    if(</span><span>$value</span><span>)<br>    {<br>      </span><span>$this</span><span>-></span><span>flags </span><span>|= </span><span>$flag</span><span>;<br>    }<br>    else<br>    {<br>      </span><span>$this</span><span>-></span><span>flags </span><span>&= ~</span><span>$flag</span><span>;<br>    }<br>  }<br>}<br></span><span>?><br></span><br>Die Die obige Klasse ist abstrakt und kann nicht instanziiert werden, daher ist eine Erweiterung erforderlich. Nachfolgend finden Sie eine einfache Erweiterung mit dem Namen „Benutzer“, die der Übersichtlichkeit halber stark gekürzt ist. Beachten Sie, dass ich konstante Variablen UND Methoden definiere, um sie zu verwenden.<br><span><?php<br></span><span># User.php<br></span><span>require(</span><span>'BitwiseFlag.php'</span><span>);<br>Klasse </span><span>Benutzer </span><span>erweitert </span><span>BitwiseFlag<br></span><span>{ <br>  const </span><span>FLAG_REGISTERED </span><span>= </span><span>1</span><span>; </span><span>// BIT #1 von $flags hat den Wert 1<br>  </span><span>const </span><span>FLAG_ACTIVE </span><span>= </span><span>2</span><span>;     </span><span>// BIT #2 von $flags hat den Wert 2<br>  </span><span>const </span><span>FLAG_MEMBER </span><span>= </span><span>4</span><span>;     </span><span>// BIT #3 von $flags hat den Wert 4<br>  </span><span>const </span><span>FLAG_ADMIN </span><span>= </span><span>8</span><span>;      </span><span>// BIT Nr. 4 von $flags hat den Wert 8<br>  </span><span>öffentliche Funktion </span><span>isRegistered</span><span>(){<br>    return </span><span>$this</span><span>-></span><span>isFlagSet</span><span>(</span><span>self</span><span>::</span><span>FLAG_REGISTERED</span><span>);<br>  }<br>  öffentliche Funktion </span><span>isActive</span><span>(){<br>    return </span><span>$this</span> <span>-></span><span>isFlagSet</span><span>(</span><span>self</span><span>::</span><span>FLAG_ACTIVE</span><span>); <br>  }<br>  öffentliche Funktion </span><span>isMember</span><span>(){<br>    return </span><span>$this</span><span>-></span><span>isFlagSet</span><span>(</span><span>self</span><span>::</span><span>FLAG_MEMBER</span><span>);<br>  }<br> öffentliche Funktion </span><span>isAdmin</span><span>(){<br>    return </span><span>$this</span><span>-></span><span>isFlagSet</span><span>( </span><span>self</span><span>::</span><span>FLAG_ADMIN</span><span>);<br>  }<br> public function </span><span>setRegistered</span><span>(</span><span>$value</span><span>){<br>    </span><span>$this</span><span>-></span><span>setFlag</span><span>(</span><span>self</span><span>::</span><span>FLAG_REGISTERED</span><span>, </span><span>$value</span><span>);<br>  }<br>  öffentliche Funktion </span><span>setActive</span><span>(</span><span>$value</span><span>){<br>    </span><span>$this</span><span>-></span><span>setFlag</span><span>(</span><span>self</span><span>::</span><span>FLAG_ACTIVE</span><span>, </span><span>$value</span><span>);<br>  }<br>  öffentliche Funktion </span><span>setMember</span><span>(</span><span>$value</span><span>){<br>    </span><span>$this</span><span>-></span><span>setFlag</span><span>(</span><span>self</span><span> ::</span><span>FLAG_MEMBER</span><span>, </span><span>$value</span><span>);<br>  }<br>  öffentliche Funktion </span><span>setAdmin</span><span>(</span><span>$value</span><span>){<br>    </span><span>$this</span><span>-></span><span>setFlag</span><span>(</span><span>self</span><span>::</span><span>FLAG_ADMIN</span><span>, </span><span>$value</span><span>); <br>  }<br>  öffentliche Funktion </span><span>__toString</span><span>(){<br>    return </span><span>'User [' </span><span>.<br>      ( </span><span>$this</span><span>-></span><span>isRegistered</span><span>() ? </span><span>'REGISTERIERT' </span><span>: </span><span>''</span><span>) .<br>      (</span><span>$this</span><span>-></span><span>isActive</span><span>() ? </span><span>' AKTIV' </span><span>: </span><span>''</span><span>) .<br>      (</span><span>$this</span><span>-></span><span>isMember</span><span>() ? </span><span>'MITGLIED' </span><span>: </span><span>''</span><span>) .<br>      (</span><span>$this</span><span>-></span><span>isAdmin</span><span>() ? </span><span>' ADMIN' </span><span>: </span><span>''</span><span>) .<br>    </span><span>']'</span><span>;<br>  }<br>}<br></span><span>?><br></span><br>Dies Scheint eine Menge Arbeit zu sein, aber wir haben viele Probleme angesprochen, zum Beispiel ist die Verwendung und Pflege des Codes einfach und das Abrufen und Setzen von Flag-Werten ist sinnvoll. Mit der User-Klasse können Sie jetzt sehen, wie einfach und intuitiv bitweise Flag-Operationen sind werden.<br><span><?php<br></span><span>require(</span><span>'User.php'</span><span>)<br></span><span> $user </span><span>= neuer </span><span>Benutzer</span><span>();<br></span><span>$user</span><span>-></span><span>setRegistered</span><span>(</span><span>true</span><span>);<br></span><span>$user</span><span>-></span><span>setActive</span><span>(</span><span>true</span><span>);<br></span><span>$user</span><span>-></span><span> setMember</span><span>(</span><span>true</span><span>);<br></span><span>$user</span><span>-></span><span>setAdmin </span><span>(</span><span>true</span><span>);<br>echo </span><span>$user</span><span>;  </span><span>// Ausgaben: Benutzer [REGISTERED ACTIVE MEMBER ADMIN]<br></span><span>?></span><p></p><p></p><p>up</p><p>unten</p><div title="100% like this...">6<span><span>zlel grxnslxves13 bei hotmail dot com~=s/x/ee/g</span></span> ? <div title="2005-10-26 07:30"> <span>vor 9 Jahren</span><p></p> <p><codefira mono code pro word-wrap:break-word display:block><span>I refer to Eric Swanson's post on Perl VS PHP's implementation of xor. <br>Actually, this is not an issue with the implementation of XOR,  but a lot more to do with the lose-typing policy that PHP adopts. <br>Freely switching between int and float is good for most cases, but problems happen when your value is near the word size of your machine. Which is to say, 32-bit machines will encounter problems with values that hover around 0x80000000 - primarily because PHP does not support unsigned integers.<br>using bindec/decbin would address this issue as a work-around to do unsigned-int xor, but here's the real picture (i'm not claiming that this code will perform better, but this would be a better pedagogical code):<br><span><?php<br></span><span>function </span><span>unsigned_xor32 </span><span>(</span><span>$a</span><span>, </span><span>$b</span><span>) <br>{<br> </span><span>$a1 </span><span>= </span><span>$a </span><span>& </span><span>0x7FFF0000</span><span>;<br> </span><span>$a2 </span><span>= </span><span>$a </span><span>& </span><span>0x0000FFFF</span><span>;<br> </span><span>$a3 </span><span>= </span><span>$a </span><span>& </span><span>0x80000000</span><span>;<br> </span><span>$b1 </span><span>= </span><span>$b </span><span>& </span><span>0x7FFF0000</span><span>;<br> </span><span>$b2 </span><span>= </span><span>$b </span><span>& </span><span>0x0000FFFF</span><span>;<br> </span><span>$b3 </span><span>= </span><span>$b </span><span>& </span><span>0x80000000</span><span>;<br> </span><span>$c </span><span>= (</span><span>$a3 </span><span>!= </span><span>$b3</span><span>) ? </span><span>0x80000000 </span><span>: </span><span>0</span><span>;<br> return ((</span><span>$a1 </span><span>^ </span><span>$b1</span><span>) |(</span><span>$a2 </span><span>^ </span><span>$b2</span><span>)) &#43; </span><span>$c</span><span>;<br>}<br></span><span>$x </span><span>= </span><span>3851235679</span><span>;<br></span><span>$y </span><span>= </span><span>43814</span><span>;<br>echo </span><span>"<br>This is the value we want"</span><span>;<br>echo </span><span>"<br>3851262585"</span><span>;<br>echo </span><span>"<br>The result of a native xor operation on integer values is treated as a signed integer"</span><span>;<br>echo </span><span>"<br>"</span><span>.(</span><span>$x </span><span>^ </span><span>$y</span><span>);<br>echo </span><span>"<br>We therefore perform the MSB separately"</span><span>;<br>echo </span><span>"<br>"</span><span>.</span><span>unsigned_xor32</span><span>(</span><span>$x</span><span>, </span><span>$y</span><span>);<br></span><span>?><br></span><br>This is really foundation stuff, but for those of you who missed this in college, there seems to be something on 2's complement here: <br>http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm</span></codefira></p> <p></p> <p></p> <p>oben</p> <p>unten</p> <div title="100% like this...">3<span><span>durchhängen bei ich dot net</span></span> ? <div title="2013-07-14 06:52"> <span>vor 2 Jahren</span><p></p> <p><codefira mono code pro zeilenumbruch:wortumbruch display:block><codefira mono code pro word-wrap:break-word display:block><span>me reimplement for bitwise NOT (~)<br>    protected function flipBin($number) {<br>        $bin = str_pad(base_convert($number, 10, 2), 32, 0, STR_PAD_LEFT);<br>        for ($i = 0; $i < 32; $i&#43;&#43;) {<br> switch ($bin{$i}) {<br> case '0' :<br> $bin{$i} = '1';<br> break;<br> case '1' :<br> $bin{$i} = '0';<br> break;<br> }<br> }<br> return bindec($bin);<br> }<br>the benefit is, it works with numbers greater MAX_INT</span>meine Neuimplementierung für bitweise NOT (~)
    protected function flipBin($number) {
        $bin = str_pad(base_convert($number, 10, 2), 32, 0, STR_PAD_LEFT);
        for ($i = 0; $i < 32; $i++) {
          switch ($bin{$i}) {
                case '0' :
                  $bin{$i} = '1';
                 
                case '1' :
                    $bin{$i} = '0';
                  break;
         
       
      return bin);
    }< br>Der Vorteil ist, dass es mit Zahlen größer MAX_INT

oben

unten<🎜> funktioniert
3

vivekanand dot pathak25 bei gmail dot com ?
vor 2 Jahren

<codeFira Mono','Source Code Pro',monospace; word-wrap:break-word; display:block"><span>$a = 9;<br>$b = 10;<br>echo $a & $b;<br>place value 128 64 32 16 8 4 2 1<br>$a 0 0 0 0 1 0 0 1 =9<br>$b 0 0 0 0 1 0 1 0 =10<br>result 8 <br>only bit they share together is the 8 bit. So 8 gets returned.<br> $a = 36;<br>$b = 103;<br>echo $a & $b;<br>place value 128 64 32 16 8 4 2 1<br>$a 0 0 1 0 0 1 0 0 =36<br>$b 0 1 1 0 0 1 1 1 =103<br>result 32&#43;4 = 36<br>the only bits these two share together are the bits 32 and 4 which when added together return 36.<br>$a = 9;<br>$b = 10;<br>echo $a | $b;<br>place value 128 64 32 16 8 4 2 1<br>$a 0 0 0 0 1 0 0 1 =9<br>$b 0 0 0 0 1 0 1 0 =10<br>result 8&#43;2&#43;1 = 11<br>3 bits set, in the 8, 2, and 1 column.add those up 8&#43;2&#43;1 and you get 11<br>$a = 9;<br>$b = 10;<br>echo $a ^ $b;<br>place value 128 64 32 16 8 4 2 1<br>$a 0 0 0 0 1 0 0 1 =9<br>$b 0 0 0 0 1 0 1 0 =10<br>result 2&#43;1 = 3<br>the 2 bit and the 1 bit that they each have set but don't share. Soooo 2&#43;1 = 3</span>$a =     9;
$b =     10;
echo $a & $b;
Stellenwert   128  64  32  16   8  4   2   1
$a                     0 0 Bit. Es wird also 8 zurückgegeben.
$a =    36;  0    1   0   0   = 36
$b                     0      1    1     0    0    1   1   1   =103
Ergebnis  32+4 = 36
Die einzigen Bits, die diese beiden gemeinsam haben, sind die Bits 32 und 4, die zusammen 36 ergeben.
$a =     9;
$b =     10;
echo $a | $b;
Stellenwert   128  64  32  16   8  4   2   1
$a                   0      0    0     0 1  0   0   1 =9
$b                     0      0    0     0    1   0  1   0   =10
Ergebnis 8+2+1 = 11
3 Bits gesetzt, in den Spalten 8, 2 und 1. Addieren Sie diese zu 8+ 2+1 und du erhältst 11
$a =     9;
$b =     10;
echo $a ^ $b;
Stellenwert   128  64  32  16   8  4   2   1
$ a                     0      0    0     0    1  0   0     =9
$b                0      0    0     0    1   0  1     =10
Ergebnis  2+1 = 3
die 2 Bit und das 1 Bit, die sie jeweils gesetzt haben aber nicht teilen. Soooo 2+1 = 3

oben

unten

3

erich bei seachawaii dot com
 ? vor 2 Jahren

<span>Just a note regarding negative shift values, as the documentation states each shift is an integer multiply or divide (left or right respectively) by 2. That means a negative shift value (the right hand operand) effects the sign of the shift and NOT the direction of the shift as I would have expected. <br>FE. 0xff >> -2 results in 0x0 <br>and 0xff << -2 result in 0xFFFFFFFFC0000000 (dependant on PHP_INT_MAX)</span></p>Nur ​​eine Anmerkung zum Negativen Verschiebungswerte, da in der Dokumentation angegeben ist, dass jede Verschiebung eine Ganzzahl ist, multipliziert oder dividiert (nach links bzw. rechts) mit 2. Das bedeutet, dass ein negativer Verschiebungswert (der rechte Operand) das Vorzeichen der Verschiebung und NICHT die Richtung der Verschiebung beeinflusst Ich würde erwartet haben.  <br>FE. 0xff >> -2 ergibt 0x0 <br>und 0xff << -2 ergibt 0xFFFFFFFFC0000000 (abhängig von PHP_INT_MAX)</p>

oben

unten

4 cw3theophilus bei gmail dot com
 ?

vor 6 Jahren<🎜><🎜>

For those who are looking for a circular bit shift function in PHP (especially useful for cryptographic functions) that works with negtive values, here is a little function I wrote:
(Note: It took me almost a whole day to get this to work with negative $num values (I couldn't figure out why it sometimes worked and other times didn't), because PHP only has an arithmatic and not a logical bitwise right shift like I am used to. I.e. 0x80000001>>16 will ouputs (in binary) "1111 1111 1111 1111 1000 0000 0000 0000" instead of "0000 0000 0000 0000 1000 0000 0000 0000" like you would expect. To fix this you have to apply the mask (by bitwise &) equal to 0x7FFFFFFF right shifted one less than the offset you are shifting by.)
function circular_shift($num,$offset) { //Do a nondestructive circular bitwise shift, if offset positive shift left, if negative shift right
$num=(int)$num;
$mask=0x7fffffff; //Mask to cater for the fact that PHP only does arithmatic right shifts and not logical i.e. PHP doesn't give expected output when right shifting negative values
if ($offset>0) {
        
$num=($num<<$offset%32) | (($num>>(32-$offset%32)) & ($mask>>(31-$offset%32)));
    }
    elseif (
$offset<0){
$offset=abs($offset);
$num=(($num>>$offset%32) & ($mask>>(-1+$offset%32))) | ($num<<(32-$offset%32));
}
return
$num;
}
?>

oben

unten

3m0sh bei hotmail dot com ?
vor 7 Jahren

@greenone - nice function, thanks. I've adapted it for key usage:
function bitxor($str, $key) {
$xorWidth = PHP_INT_SIZE*8;
// split
$o1 = str_split($str, $xorWidth);
$o2 = str_split(str_pad('', strlen($str), $key), $xorWidth);
$res = '';
$runs = count($o1);
for(
$i=0;$i<$runs;$i++)
$res .= decbin(bindec($o1[$i]) ^ bindec($o2[$i]));
return
$res;
}
?>

oben

unten

3Eric Swanson ?
vor 9 Jahren

Perl vs. PHP implementation of the ^ operator:
After attempting to translate a Perl module into PHP, I realized that Perl's implementation of the ^ operator is different than the PHP implementation.  By default, Perl treats the variables as floats and PHP as integers.  I was able to verify the PHP use of the operator by stating "use integer;" within the Perl module, which output the exact same result as PHP was using.
The logical decision would be to cast every variable as (float) when using the ^ operator in PHP.  However, this will not yield the same results.  After about a half hour of banging my head against the wall, I discovered a gem and wrote a function using the binary-decimal conversions in PHP.
/*
not having much experience with bitwise operations, I cannot tell you that this is the BEST solution, but it certainly is a solution that finally works and always returns the EXACT same result Perl provides.
*/
function binxor($a, $b) {
    return bindec(decbin((float)$a ^ (float)$b));
}
//normal PHP code will not yeild the same result as Perl
$result = 3851235679 ^ 43814; //= -443704711
//to get the same result as Perl
$result = binxor(3851235679, 43814); //= 3851262585
//YIPPEE!!!
//to see the differences, try the following
$a = 3851235679 XOR 43814;
$b = 3851235679 ^ 43814; //integer result
$c = (float)3851235679 ^ (float)43814; //same as $b
$d = binxor(3851235679, 43814); //same as Perl!!
echo("A: $a
");
echo("B: $b
");
echo("C: $c
");
echo("D: $d
");
Perl vs. PHP-Implementierung des ^-Operators:
Nachdem ich versucht hatte, ein Perl-Modul in PHP zu übersetzen, wurde mir klar, dass sich die Perl-Implementierung des ^-Operators von der PHP-Implementierung unterscheidet.  Standardmäßig behandelt Perl die Variablen als Gleitkommazahlen und PHP als Ganzzahlen.  Ich konnte die Verwendung von PHP überprüfen der Operator durch die Angabe „use integer;“ innerhalb des Perl-Moduls, das genau das gleiche Ergebnis ausgibt, das PHP verwendet hat.
Die logische Entscheidung wäre, jede Variable in (float) umzuwandeln, wenn der ^-Operator in PHP verwendet wird.  Allerdings wird dies nicht zu den gleichen Ergebnissen führen.  Nachdem ich ungefähr eine halbe Stunde lang meinen Kopf gegen die Wand geschlagen hatte, entdeckte ich ein Juwel und schrieb eine Funktion mit dem Binär-Dezimal-Konvertierungen in PHP.
/*
Da ich nicht viel Erfahrung mit bitweisen Operationen habe, kann ich Ihnen nicht sagen, dass dies die BESTE Lösung ist, aber es ist sicherlich eine Lösung, die letztendlich funktioniert und immer EXAKT das gleiche Ergebnis zurückgibt Perl bietet.
*/
function binxor($a, $b) {
    return bindec(decbin((float)$a ^ (float)$b));
}
//normaler PHP-Code liefert nicht das gleiche Ergebnis wie Perl
$result = 3851235679 ^ 43814; //= -443704711
//um das gleiche Ergebnis wie Perl zu erhalten
$result = binxor(3851235679, 43814); //= 3851262585
//YIPPEE!!!
//Um die Unterschiede zu sehen, versuchen Sie Folgendes:
$a = 3851235679 XOR 43814;
$b = 3851235679 ^ 43814; //ganzzahliges Ergebnis
$c = (float)3851235679 ^ (float)43814; //dasselbe wie $b
$d = binxor(3851235679, 43814); //wie Perl!!
echo("A: $a
");
echo("B: $b
");
echo("C : $c
");
echo("D: $d
");

oben

unten
10Grayda dot NOSPAM bei DONTSPAM dot solidinc dot org
 ? vor 6 Jahren

Anfangs habe ich Bitmasking entdeckt ein verwirrendes Konzept zu sein und keine Verwendung dafür zu finden. Deshalb habe ich dieses Code-Snippet zusammengestellt, falls jemand anderes verwirrt ist:
    // Die verschiedenen Details, die ein Fahrzeug haben kann
    
$hasFourWheels 1;
    
$hasTwoWheels   2;
    
$hasDoors      4;
    
$ hasRedColor  8;
    
$bike          $hasTwoWheels;
    
$golfBuggy     $hasFourWheels;
    
$ford          $hasFourWheels $hasDoors;
    
$ferrari       $hasFourWheels $hasDoors $hasRedColor;
    
$isBike        $hasFourWheels $bike# Falsch, weil $bike keine vier Räder hat
    
$isGolfBuggy   $hasFourWheels  $golfBuggy# Stimmt, denn $golfBuggy hat vier Räder
    
$isFord        $hasFourWheels $ford# Stimmt, denn $ford $hatFourWheels
?>

Und das lässt sich auf viele Dinge anwenden, zum Beispiel auf die Sicherheit:
    // Sicherheitsberechtigungen:
    
$writePost 1;
    
$readPost 2;
    
$deletePost = 4;
    
$addUser 8;
    
$deleteUser 16;
    
    
// Benutzergruppen:
    
$administrator $writePost $readPosts $deletePosts $addUser $deleteUser;
    
$moderator $readPost $deletePost $deleteUser;
    
$writer $writePost $readPost;
    
$guest $readPost;
    
// Funktion zum Überprüfen der Berechtigung
    
Funktion checkPermission($user$permission) {
        if(
$user $permission) {
            return 
true;
        } else {
            return 
false;
        }
    
// Jetzt wenden wir das alles an!    
if(checkPermission( $administrator$deleteUser)) {        
deleteUser("Einige Benutzer"); # Dies wird ausgeführt, weil $administrator $deleteUser    
}
?>

Wenn man es einmal verstanden hat, ist es SEHR nützlich! Denken Sie daran, jeden Wert um die Potenz von zwei zu erhöhen, um Probleme zu vermeiden

nach oben

nach unten

6Ivoras bei gmail dot com ?
vor 4 Jahren

As an additional curiosity, for some reason the result of the operation ("18" & "32") is "10". In other words, try avoiding using the binary operators on strings :)Als zusätzliche Kuriosität: Aus irgendeinem Grund ist das Ergebnis der Operation („18“ und „32“) „10“. Mit anderen Worten: Vermeiden Sie die Verwendung binärer Operatoren für Zeichenfolgen :)

oben

unten10
? vor 10 Jahren

A bitwise operators practical case :
// We want to know the red, green and blue values of this color :
$color = 0xFEA946 ;
$red = $color >> 16 ;
    
$green = ($color 0x00FF00) >> ;
    
$blue $color 0x0000FF ;
    
printf('Red : %X (%d), Green : %X (%d), Blue : %X (%d)',
        
$red$red$green$green$blue$blue) ;
    
// Will display...
    // Red : FE (254), Green : A9 (169), Blue : 46 (70)
?>

Ein praktischer bitweiser Operator case :

    

// Wir wollen die Rot-, Grün- und Blauwerte dieser Farbe wissen :

    

$color 

0xFEA946 ;
    $red 

Here is an example for bitwise leftrotate and rightrotate.
Note that this function works only with decimal numbers - other types can be converted with pack().
function rotate ( $decimal, $bits) {
$binary = decbin($decimal);
return (
bindec(substr($binary, $bits).substr($binary, 0, $bits))
);
}
// Rotate 124 (1111100) to the left with 1 bits
echo rotate(124, 1);
// = 121 (1111001)
// Rotate 124 (1111100) to the right with 3 bits
echo rotate(124, -3);
// = 79 (1001111)
?>$color 

>> 

16 

;

    

$grün 
= ($farbe 
0x00FF00) >> 8 ;    $blue = $color &  0x0000FF ;    printf('Red : %X (%d), Grün: %X (%d), Blau: %X (%d)',        $red , $rot, $grün, $grün, $blau, $blau) ;    // Wird angezeigt...    // Rot: FE (254), Grün: A9 (169), Blau: 46 (70)?>obenunten4zooly bei globmi dot com ? vor 5 JahrenHier ist ein Beispiel für bitweise leftrotate und rightrotate.Beachten Sie, dass diese Funktion nur mit Dezimalzahlen funktioniert – andere Typen können mit pack() konvertiert werden.<🎜><🎜>Funktion <🎜> <🎜>drehen <🎜><🎜>( <🎜><🎜>$decimal<🎜><🎜>, <🎜><🎜>$bits<🎜><🎜>) {<🎜>  <🎜><🎜>$binary <🎜><🎜>= <🎜><🎜>decbin<🎜><🎜>(<🎜><🎜>$decimal<🎜><🎜>);< 🎜>  return (<🎜>    <🎜><🎜>bindec<🎜><🎜>(<🎜><🎜>substr<🎜><🎜>(<🎜><🎜>$binary<🎜><🎜>, <🎜><🎜>$bits<🎜><🎜>).<🎜><🎜>substr<🎜><🎜>(<🎜><🎜>$binary<🎜><🎜>, <🎜><🎜 >0<🎜><🎜>, <🎜><🎜>$bits<🎜><🎜>))<🎜>  );<🎜>}<🎜><🎜><🎜>// 124 drehen (1111100) nach links mit 1 Bit<🎜><🎜><🎜>Echo <🎜><🎜>drehen<🎜><🎜>(<🎜><🎜>124<🎜><🎜>, <🎜><🎜> 1<🎜><🎜>);<🎜><🎜><🎜>// = 121 (1111001)<🎜>// Rotiere 124 (1111100) mit 3 Bits nach rechts<🎜><🎜><🎜> Echo <🎜><🎜>drehen<🎜><🎜>(<🎜><🎜>124<🎜><🎜>, -<🎜><🎜>3<🎜><🎜>);<🎜><🎜><🎜>// = 79 (1001111)<🎜><🎜><🎜>?> hochrunter3Josh bei joshstrike dot com ? vor 4 Jahren

More referencing this for myself than anything... if you need to iterate through every possible binary combination where $n number of flags are set to 1 in a mask of $bits length: 
echo masksOf(3,10);
function
masksOf($n,$bits) {
$u = pow(2,$bits)-1; //start value, full flags on.
$masks = array();
while (
$u>0) { 
        
$z numflags($u); 
        if (
$z==$narray_push($masks,$u); 
        
$u--; 
    } 
    return (
$masks);    

function 
numflags($n) { 
    
$k 0
    while (
$n) { 
        
$k += $n 1
        
$n $n >> 1
    } 
    return (
$k); 
//    alternately: 
//    $u = 0; 
//    for ($k=1;$k<=$n;$k*=2) {
// $u+=($n&$k?1:0);
// }
// return ($u);
}
?>

oben

unten

4spencer-p-moy zum Beispiel dot com ?
vor 3 Jahren

The NOT or complement operator ( ~ ) and negative binary numbers can be confusing.
~2 = -3  because you use the formula  ~x = -x - 1  The bitwise complement of a decimal number is the negation of the number minus 1.
NOTE: just using 4 bits here for the examples below but in reality PHP uses 32 bits.
Converting a negative decimal number (ie: -3) into binary takes 3 steps:
1) convert the positive version of the decimal number into binary (ie: 3 = 0011)
2) flips the bits (ie: 0011 becomes 1100)
3) add 1 (ie: 1100  + 0001 = 1101)
You might be wondering how does 1101 = -3. Well PHP uses the method "2's complement" to render negative binary numbers. If the left most bit is a 1 then the binary number is negative and you flip the bits and add 1. If it is 0 then it is positive and you don't have to do anything. So 0010 would be a positive 2. If it is 1101, it is negative and you flip the bits to get 0010. Add 1 and you get 0011 which equals -3.
Der NOT- oder Komplementoperator ( ~ ) und negative Binärzahlen können verwirrend sein.
~2 = -3 , weil Sie die Formel  ~x = -x - 1  verwenden. Das bitweise Komplement einer Dezimalzahl ist die Negation der Zahl minus 1.
HINWEIS: Für die folgenden Beispiele werden hier nur 4 Bits verwendet, in Wirklichkeit verwendet PHP jedoch 32 Bits.
Die Konvertierung einer negativen Dezimalzahl (z. B. -3) in eine Binärzahl erfordert 3 Schritte:
1) Konvertieren der positiven Version der Dezimalzahl in eine Binärzahl umwandeln (z. B. 3 = 0011)
2) die Bits umdrehen (z. B. 0011 wird zu 1100)
3) 1 addieren (z. B. 1100  + 0001 = 1101)
Sie fragen sich vielleicht, wie macht 1101 = -3. Nun, PHP verwendet die Methode „2er-Komplement“, um negative Binärzahlen darzustellen. Wenn das Bit ganz links eine 1 ist, ist die Binärzahl negativ und Sie drehen die Bits um und addieren 1. Wenn es 0 ist, ist es positiv und Sie tun es nicht muss irgendetwas tun. 0010 wäre also eine positive 2. Wenn es 1101 ist, ist es negativ und Sie drehen die Bits um, um 0010 zu erhalten. Addieren Sie 1 und Sie erhalten 0011, was -3 entspricht.

oben

unten
4Silber
 ? 6 Jahre
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Lösung: Ihre Organisation verlangt von Ihnen, dass Sie Ihre PIN ändern Lösung: Ihre Organisation verlangt von Ihnen, dass Sie Ihre PIN ändern Oct 04, 2023 pm 05:45 PM

Auf dem Anmeldebildschirm wird die Meldung „Ihre Organisation hat Sie gebeten, Ihre PIN zu ändern“ angezeigt. Dies geschieht, wenn das PIN-Ablauflimit auf einem Computer erreicht wird, der organisationsbasierte Kontoeinstellungen verwendet und die Kontrolle über persönliche Geräte hat. Wenn Sie Windows jedoch über ein persönliches Konto einrichten, sollte die Fehlermeldung im Idealfall nicht erscheinen. Obwohl dies nicht immer der Fall ist. Die meisten Benutzer, die auf Fehler stoßen, melden dies über ihre persönlichen Konten. Warum fordert mich meine Organisation auf, meine PIN unter Windows 11 zu ändern? Es ist möglich, dass Ihr Konto mit einer Organisation verknüpft ist. Ihr primärer Ansatz sollte darin bestehen, dies zu überprüfen. Die Kontaktaufnahme mit Ihrem Domain-Administrator kann hilfreich sein! Darüber hinaus können falsch konfigurierte lokale Richtlinieneinstellungen oder falsche Registrierungsschlüssel Fehler verursachen. Im Augenblick

So passen Sie die Fensterrahmeneinstellungen unter Windows 11 an: Farbe und Größe ändern So passen Sie die Fensterrahmeneinstellungen unter Windows 11 an: Farbe und Größe ändern Sep 22, 2023 am 11:37 AM

Windows 11 bringt frisches und elegantes Design in den Vordergrund; die moderne Benutzeroberfläche ermöglicht es Ihnen, feinste Details, wie zum Beispiel Fensterränder, zu personalisieren und zu ändern. In diesem Leitfaden besprechen wir Schritt-für-Schritt-Anleitungen, die Ihnen dabei helfen, eine Umgebung zu erstellen, die Ihrem Stil im Windows-Betriebssystem entspricht. Wie ändere ich die Fensterrahmeneinstellungen? Drücken Sie +, um die Einstellungen-App zu öffnen. WindowsIch gehe zu Personalisierung und klicke auf Farbeinstellungen. Farbänderung Fensterränder Einstellungen Fenster 11" Breite="643" Höhe="500" > Suchen Sie die Option Akzentfarbe auf Titelleiste und Fensterrändern anzeigen und schalten Sie den Schalter daneben um. Um Akzentfarben im Startmenü und in der Taskleiste anzuzeigen Um die Designfarbe im Startmenü und in der Taskleiste anzuzeigen, aktivieren Sie „Design im Startmenü und in der Taskleiste anzeigen“.

Wie ändere ich die Farbe der Titelleiste unter Windows 11? Wie ändere ich die Farbe der Titelleiste unter Windows 11? Sep 14, 2023 pm 03:33 PM

Standardmäßig hängt die Farbe der Titelleiste unter Windows 11 vom gewählten Dunkel-/Hell-Design ab. Sie können es jedoch in jede gewünschte Farbe ändern. In diesem Leitfaden besprechen wir Schritt-für-Schritt-Anleitungen für drei Möglichkeiten, wie Sie Ihr Desktop-Erlebnis ändern und personalisieren können, um es optisch ansprechend zu gestalten. Ist es möglich, die Farbe der Titelleiste von aktiven und inaktiven Fenstern zu ändern? Ja, Sie können die Farbe der Titelleiste aktiver Fenster mit der App „Einstellungen“ ändern, oder Sie können die Farbe der Titelleiste inaktiver Fenster mit dem Registrierungseditor ändern. Um diese Schritte zu lernen, fahren Sie mit dem nächsten Abschnitt fort. Wie ändere ich die Farbe der Titelleiste in Windows 11? 1. Drücken Sie in der App „Einstellungen“ +, um das Einstellungsfenster zu öffnen. WindowsIch gehe zu „Personalisierung“ und dann

OOBELANGUAGE-Fehlerprobleme bei der Reparatur von Windows 11/10 OOBELANGUAGE-Fehlerprobleme bei der Reparatur von Windows 11/10 Jul 16, 2023 pm 03:29 PM

Wird auf der Windows Installer-Seite „Ein Problem ist aufgetreten“ zusammen mit der Anweisung „OOBELANGUAGE“ angezeigt? Aufgrund solcher Fehler bricht die Installation von Windows manchmal ab. OOBE bedeutet Out-of-the-Box-Erlebnis. Wie aus der Fehlermeldung hervorgeht, handelt es sich hierbei um ein Problem im Zusammenhang mit der OOBE-Sprachauswahl. Sie müssen sich keine Sorgen machen, Sie können dieses Problem durch eine geschickte Bearbeitung der Registrierung über den OOBE-Bildschirm selbst lösen. Schnelllösung – 1. Klicken Sie unten in der OOBE-App auf die Schaltfläche „Wiederholen“. Dadurch wird der Prozess ohne weitere Probleme fortgesetzt. 2. Verwenden Sie den Netzschalter, um das Herunterfahren des Systems zu erzwingen. Nach dem Neustart des Systems sollte OOBE fortgesetzt werden. 3. Trennen Sie das System vom Internet. Schließen Sie alle Aspekte von OOBE im Offline-Modus ab

So aktivieren oder deaktivieren Sie die Vorschau von Miniaturansichten in der Taskleiste unter Windows 11 So aktivieren oder deaktivieren Sie die Vorschau von Miniaturansichten in der Taskleiste unter Windows 11 Sep 15, 2023 pm 03:57 PM

Miniaturansichten in der Taskleiste können Spaß machen, aber auch ablenken oder stören. Wenn man bedenkt, wie oft Sie mit der Maus über diesen Bereich fahren, haben Sie möglicherweise ein paar Mal versehentlich wichtige Fenster geschlossen. Ein weiterer Nachteil besteht darin, dass es mehr Systemressourcen verbraucht. Wenn Sie also nach einer Möglichkeit suchen, ressourceneffizienter zu arbeiten, zeigen wir Ihnen, wie Sie es deaktivieren können. Wenn Ihre Hardware-Spezifikationen jedoch dafür geeignet sind und Ihnen die Vorschau gefällt, können Sie sie aktivieren. Wie aktiviere ich die Miniaturvorschau der Taskleiste in Windows 11? 1. Tippen Sie in der App „Einstellungen“ auf die Taste und klicken Sie auf „Einstellungen“. Klicken Sie unter Windows auf „System“ und wählen Sie „Info“. Klicken Sie auf Erweiterte Systemeinstellungen. Navigieren Sie zur Registerkarte „Erweitert“ und wählen Sie unter „Leistung“ die Option „Einstellungen“ aus. Wählen Sie „Visuelle Effekte“

Anleitung zur Anzeigeskalierung unter Windows 11 Anleitung zur Anzeigeskalierung unter Windows 11 Sep 19, 2023 pm 06:45 PM

Wir alle haben unterschiedliche Vorlieben, wenn es um die Anzeigeskalierung unter Windows 11 geht. Manche Leute mögen große Symbole, andere mögen kleine Symbole. Wir sind uns jedoch alle einig, dass die richtige Skalierung wichtig ist. Eine schlechte Schriftartenskalierung oder eine Überskalierung von Bildern kann bei der Arbeit ein echter Produktivitätskiller sein. Sie müssen daher wissen, wie Sie sie anpassen können, um die Fähigkeiten Ihres Systems optimal zu nutzen. Vorteile des benutzerdefinierten Zooms: Dies ist eine nützliche Funktion für Personen, die Schwierigkeiten haben, Text auf dem Bildschirm zu lesen. Es hilft Ihnen, mehr gleichzeitig auf dem Bildschirm zu sehen. Sie können benutzerdefinierte Erweiterungsprofile erstellen, die nur für bestimmte Monitore und Anwendungen gelten. Kann dazu beitragen, die Leistung von Low-End-Hardware zu verbessern. Dadurch haben Sie mehr Kontrolle darüber, was auf Ihrem Bildschirm angezeigt wird. So verwenden Sie Windows 11

10 Möglichkeiten, die Helligkeit unter Windows 11 anzupassen 10 Möglichkeiten, die Helligkeit unter Windows 11 anzupassen Dec 18, 2023 pm 02:21 PM

Die Bildschirmhelligkeit ist ein wesentlicher Bestandteil der Nutzung moderner Computergeräte, insbesondere wenn Sie über einen längeren Zeitraum auf den Bildschirm schauen. Es hilft Ihnen, die Belastung Ihrer Augen zu reduzieren, die Lesbarkeit zu verbessern und Inhalte einfach und effizient anzuzeigen. Abhängig von Ihren Einstellungen kann es jedoch manchmal schwierig sein, die Helligkeit zu verwalten, insbesondere unter Windows 11 mit den neuen Änderungen an der Benutzeroberfläche. Wenn Sie Probleme beim Anpassen der Helligkeit haben, finden Sie hier alle Möglichkeiten, die Helligkeit unter Windows 11 zu verwalten. So ändern Sie die Helligkeit unter Windows 11 [10 Möglichkeiten erklärt] Benutzer eines einzelnen Monitors können die folgenden Methoden verwenden, um die Helligkeit unter Windows 11 anzupassen. Hierzu zählen sowohl Desktop-Systeme mit einem einzelnen Monitor als auch Laptops. Lasst uns beginnen. Methode 1: Verwenden Sie das Action Center. Das Action Center ist zugänglich

So beheben Sie den Aktivierungsfehlercode 0xc004f069 in Windows Server So beheben Sie den Aktivierungsfehlercode 0xc004f069 in Windows Server Jul 22, 2023 am 09:49 AM

Der Aktivierungsprozess unter Windows nimmt manchmal eine plötzliche Wendung und zeigt eine Fehlermeldung mit diesem Fehlercode 0xc004f069 an. Obwohl der Aktivierungsprozess online erfolgt, kann dieses Problem bei einigen älteren Systemen mit Windows Server auftreten. Führen Sie diese ersten Prüfungen durch. Wenn sie Ihnen bei der Aktivierung Ihres Systems nicht weiterhelfen, fahren Sie mit der Hauptlösung fort, um das Problem zu beheben. Problemumgehung – Schließen Sie die Fehlermeldung und das Aktivierungsfenster. Starten Sie dann Ihren Computer neu. Wiederholen Sie den Windows-Aktivierungsprozess noch einmal von Grund auf. Fix 1 – Aktivierung über das Terminal. Aktivieren Sie das Windows Server Edition-System über das CMD-Terminal. Stufe – 1 Überprüfen Sie die Windows Server-Version. Sie müssen überprüfen, welchen W-Typ Sie verwenden

See all articles