Longhorn PHP 2026 - Call For Papers

bindec

(PHP 4, PHP 5, PHP 7, PHP 8)

bindecİkilikten onluğa

Açıklama

bindec(string $ikilik_dize): int|float

ikilik_dize bağımsız değişkeniyle temsil edilen ikilik sayının onluk eşdeğerini döndürür.

bindec(), bir ikilik sayıyı int'e veya, boyut nedeniyle gerekirse float'a dönüştürür.

bindec(), tüm ikilik_dize değerlerini işaretsiz tamsayı olarak yorumlar. Bunun nedeni, bindec()'in en anlamlı biti işaret biti olarak değil, bir büyüklük basamağı olarak görmesidir.

Bağımsız Değişkenler

ikilik_dize

Dönüştürülecek ikilik dize. ikilik_dize içindeki geçersiz karakterler sessizce yok sayılır. PHP 7.4.0'dan itibaren geçersiz karakter aktarmak artık önerilmemektedir.

Uyarı

Bağımsız değişken bir dize olmalıdır. Başka veri türleri kullanmak beklenmedik sonuçlara yol açacaktır.

Dönen Değerler

ikilik_dize değerinin onluk karşılığı.

Sürüm Bilgisi

Sürüm: Açıklama
7.4.0 Geçersiz karakter aktarmak artık bir önerilmiyor bildirimi üretir. Sonuç, geçersiz karakterler yokmuş gibi hesaplanmaya devam eder.

Örnekler

Örnek 1 bindec() örneği

<?php
echo bindec('110011') . "\n";
echo
bindec('000110011') . "\n";

echo
bindec('111');
?>

Yukarıdaki örneğin çıktısı:

51
51
7

Örnek 2 bindec() girdiyi işaretsiz tamsayı olarak yorumlar

<?php
/*
* Bu örneğin asıl dersi, PHP kodunun kendisinde değil,
* çıktısındadır.
*/

$buyukluk_alt = pow(2, (PHP_INT_SIZE * 8) - 2);
p($buyukluk_alt - 1);
p($buyukluk_alt, 'Taşmayı görüyor musunuz? Bir sonraki turda da izleyin...');

p(PHP_INT_MAX, 'PHP_INT_MAX');
p(~PHP_INT_MAX, 'PHP_INT_MAX değerinden bir fazlası olarak yorumlanır');

if (
PHP_INT_SIZE == 4) {
$not = 'en büyük işaretsiz tamsayı olarak yorumlanır';
} else {
$not = 'en büyük işaretsiz tamsayı olarak yorumlanır
(18446744073709551615) ancak float hassasiyeti tarafından çarpıtılır'
;
}
p(-1, $not);


function
p($girdi, $not = '') {
echo
"girdi: $girdi\n";

$bicim = '%0' . (PHP_INT_SIZE * 8) . 'b';
$ikilik = sprintf($bicim, $girdi);
echo
"ikilik: $ikilik\n";

ini_set('precision', 20); // 64 bit makinelerde okunabilirlik için.
$onluk = bindec($ikilik);
echo
'bindec(): ' . $onluk . "\n";

if (
$not) {
echo
"NOT: $not\n";
}

echo
"\n";
}
?>

Yukarıdaki örneğin 32 bitlik makinelerdeki çıktısı:

girdi:        1073741823
ikilik:       00111111111111111111111111111111
bindec():     1073741823

girdi:        1073741824
ikilik:       01000000000000000000000000000000
bindec():     1073741824
NOT:          Taşmayı görüyor musunuz? Bir sonraki turda da izleyin...

girdi:        2147483647
ikilik:       01111111111111111111111111111111
bindec():     2147483647
NOT:          PHP_INT_MAX

girdi:        -2147483648
ikilik:       10000000000000000000000000000000
bindec():     2147483648
NOT:          PHP_INT_MAX değerinden bir fazlası olarak yorumlanır

girdi:        -1
ikilik:       11111111111111111111111111111111
bindec():     4294967295
NOT:          en büyük işaretsiz tamsayı olarak yorumlanır

Yukarıdaki örneğin 64 bitlik makinelerdeki çıktısı:

girdi:        4611686018427387903
ikilik:       0011111111111111111111111111111111111111111111111111111111111111
bindec():     4611686018427387903

girdi:        4611686018427387904
ikilik:       0100000000000000000000000000000000000000000000000000000000000000
bindec():     4611686018427387904
NOT:          Taşmayı görüyor musunuz? Bir sonraki turda da izleyin...

girdi:        9223372036854775807
ikilik:       0111111111111111111111111111111111111111111111111111111111111111
bindec():     9223372036854775807
NOT:          PHP_INT_MAX

girdi:        -9223372036854775808
ikilik:       1000000000000000000000000000000000000000000000000000000000000000
bindec():     9223372036854775808
NOT:          PHP_INT_MAX değerinden bir fazlası olarak yorumlanır

girdi:        -1
ikilik:       1111111111111111111111111111111111111111111111111111111111111111
bindec():     18446744073709551616
NOT:          en büyük işaretsiz tamsayı olarak yorumlanır
              (18446744073709551615) ancak float hassasiyeti tarafından çarpıtılır

Notlar

Bilginize:

Bu işlev, platformun int türüne sığamayacak kadar büyük sayıları dönüştürebilir; bu durumda daha büyük değerler float olarak döndürülür.

Ayrıca Bakınız

add a note

User Contributed Notes 5 notes

up
7
info at rickdg dot nl
16 years ago
Two functions to convert 16bit or 8bit binary to integer using two's complement. If input exceeds maximum bits, false is returned. Function is easily scalable to x bits by changing the hexadecimals.

<?php function _bin16dec($bin) {
    // Function to convert 16bit binary numbers to integers using two's complement
    $num = bindec($bin);
    if($num > 0xFFFF) { return false; }
    if($num >= 0x8000) {
        return -(($num ^ 0xFFFF)+1);
    } else {
        return $num;
    }
}

function _bin8dec($bin) {
    // Function to convert 8bit binary numbers to integers using two's complement
    $num = bindec($bin);
    if($num > 0xFF) { return false; }
    if($num >= 0x80) {
        return -(($num ^ 0xFF)+1);
    } else {
        return $num;
    }
} ?>
up
3
martin at punix dot de
22 years ago
## calculate binary with "shift-method" ##

<?php
function dec2bin($decimal_code){
 for($half=($decimal_code);$half>=1;$half=(floor($half))/2){
   if(($half%2)!=0){
    $y.=1;
   }
   else{
    $y.=0;
   }
  }
 $calculated_bin=strrev($y);
 return $calculated_bin;
}
?>

## example ##

[bin] 123 = [dec] 1111011

e.g.
123/2 = 61,5 => 1
61/2  = 30,5 => 1
30/2  = 15   => 0
15/2  = 7,5  => 1
7/2   = 3,5  => 1
3/2   = 1,5  => 1
1/2   = 0,5  => 1
(0/2   = 0    finish)
up
3
gwbdome at freenet dot de
21 years ago
i think a better method than the "shift-method" is my method ^^...
here it comes:

function convert2bin($string) {
     $finished=0;
     $base=1;
     if(preg_match("/[^0-9]/", $string)) {
         for($i=0; $string!=chr($i); $i++);
         $dec_nr=$i;
     }
     else $dec_nr=$string;
     while($dec_nr>$base) {
         $base=$base*2;
         if($base>$dec_nr) {
             $base=$base/2;
             break;
         }
     }
     while(!$finished) {
         if(($dec_nr-$base)>0) {
             $dec_nr=$dec_nr-$base;
             $bin_nr.=1;
             $base=$base/2;
         }
         elseif(($dec_nr-$base)<0) {
             $bin_nr.=0;
             $base=$base/2;
         }
         elseif(($dec_nr-$base)==0) {
             $bin_nr.=1;
             $finished=1;
             while($base>1) {    
                 $bin_nr.=0;
                 $base=$base/2;
             }
         }
     }
     return $bin_nr;
 }

=====================================================

if you want to reconvert it (from binary to string or integer) you can use this function: 

function reconvert($bin_nr) {
     $base=1;
     $dec_nr=0;
     $bin_nr=explode(",", preg_replace("/(.*),/", "$1", str_replace("1", "1,", str_replace("0", "0,", $bin_nr))));
     for($i=1; $i<count($bin_nr); $i++) $base=$base*2;
     foreach($bin_nr as $key=>$bin_nr_bit) {
         if($bin_nr_bit==1) {
             $dec_nr+=$base;
             $base=$base/2;
         }
         if($bin_nr_bit==0) $base=$base/2;
     }
     return(array("string"=>chr($dec_nr), "int"=>$dec_nr));
 }
up
2
Nitrogen
16 years ago
Binary to Decimal conversion using the BCMath extension..

<?php

function BCBin2Dec($Input='') {
  $Output='0';
  if(preg_match("/^[01]+$/",$Input)) {
    for($i=0;$i<strlen($Input);$i++)
      $Output=BCAdd(BCMul($Output,'2'),$Input{$i});
  }
  return($Output);
}

?>

This will simply convert from Base-2 to Base-10 using BCMath (arbitrary precision calculation).

See also: my 'BCDec2Bin' function on the 'decbin' document.
Enjoy,
Nitrogen.
up
1
alan hogan dot com slash contact
18 years ago
The "smartbindec" function I wrote below will convert any binary string (of a reasonable size) to decimal.  It will use two's complement if the leftmost bit is 1, regardless of bit length.  If you are getting unexpected negative answers, try zero-padding your strings with sprintf("%032s", $yourBitString).

<?php
function twoscomp($bin) {
    $out = "";
    $mode = "init";
    for($x = strlen($bin)-1; $x >= 0; $x--) {
        if ($mode != "init")
            $out = ($bin[$x] == "0" ? "1" : "0").$out;
        else {
            if($bin[$x] == "1") {
                $out = "1".$out;
                $mode = "invert";
            }
            else
                $out = "0".$out;
        }
    }
    return $out;
}
function smartbindec($bin) {
    if($bin[0] == 1)
        return -1 * bindec(twoscomp($bin));
    else return (int) bindec($bin);
}
?>
To Top