PHP flip 32bit integer

0

Otázka

32 bitové číslo bez znaménka. Flip všechny bity (0->1 a 1->0 ) a vrátí výsledek jako číslo bez znaménka.

Vezměte 1 například, jako unsigned 32-bitů je 00000000000000000000000000000001 a dělá mizerný dostaneme 11111111111111111111111111111110 což je 4294967294.

Můžu obrátit desítkové číslo na binární , ale neobsahuje 32 bitů otočit. Prosím, pomozte mi s tím.

5
1

To je velmi základy programování problém, a někdo, že příspěvky kód, který je pomocí řetězce manipulace je velmi moc není někdo, koho chceš učit.

To řekl, pack() je vynikající funkce, ale nepomůže s pochopení přesně to, co se děje.

Chcete-li invertovat 32 bitová hodnota; pojďme přemýšlet o tom, int v PHP. První z int je 64 bitů; ale to nevadí; můžeme použít masky, stejně, aby zajistily, dostaneme očekávanou odpověď (i když PHP změní výchozí int šířka).

$value = some_int_value; // the value to invert
$value = !$value; // flip all 64 bits
$value = $value & 0xffffffff; // ignore anything but the last 32 bits

Nebo stručněji

$invert_32_unsigned = 0xffffffff & !intval($value);
2021-11-21 06:06:24

2 piv na to pánové
user1597430

další možností je $result = ~$number & 0xffffffff
user1597430

Absolutně, ale to neznamená, že mají pěkné tři krok expanze, ale takhle bych to napsat ve výrobě.
haxbits
1

Udělal jsem to, dík všichni. To je, jak jsem to udělal.

$function flippingBits($n) { 
    $binary = sprintf('%032b', $n);
    $fliped = strtr($binary, [1,0]);
    return bindec($fliped);
}
2021-11-21 06:04:48

vynikající!!! šťastný kódování bro
Ken Lee
0

Toho může být dosaženo pomocí jediného binární operace XOR

echo $v ^ 0xffffffff;
2021-11-21 07:16:11
0

Pro PHP, můžete použít decbin a bindec pro desítkové do binární a binární do desítkové soustavy, respektive, a používat jednoduché funkce invertování bitů.

Udělal jsem funkci xinvert dělat práci, takto:

<?php
$value1=10;
echo xinvert($value1) ."<br>";

function xinvert($value1){
$string1= sprintf( "%032d",decbin($value1));
$index=0;
$string2="";
  while ($index < strlen($string1) ) {
   if (substr($string1, $index,1)=="0"){
     $string2.="1";
       }else{
     $string2.="0";
    }
   $index++;
   }
return bindec($string2);
}
?>

Poznámka: použil jsem sprintf( "%032d",decbin($hodnota1)); aby to 32 bit v délce, která je inspirována user3783243

2021-11-21 06:27:27
-1

To je základy programování, PHP má plnou podporu bitové operátory, včetně bitové NE:

$result = unpack('V', ~pack('V', 1234))

Sbalit a rozbalit zde jsou použity se vypořádat s faktem, že všechna celá čísla v PHP jsou podepsány 64 bity, celá čísla. Neposlouchejte lidi, kteří jsou konverze 4-byte čísel na řetězce nebo pole řetězců, které nemají ponětí, co dělají.

2021-11-23 13:59:31

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................