Dutch PHP Conference 2025 - Call For Papers

# decbin

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

decbinDecimal to binary

### Açıklama

decbin(int `\$num`): string

Returns a string containing a binary representation of the given `num` argument.

### Bağımsız Değişkenler

`num`

Decimal value to convert

Range of inputs on 32-bit machines
positive `num` negative `num` return value
0   0
1   1
2   10
... normal progression ...
2147483646   1111111111111111111111111111110
2147483647 (largest signed integer)   1111111111111111111111111111111 (31 1's)
2147483648 -2147483648 10000000000000000000000000000000
... normal progression ...
4294967294 -2 11111111111111111111111111111110
4294967295 (largest unsigned integer) -1 11111111111111111111111111111111 (32 1's)
Range of inputs on 64-bit machines
positive `num` negative `num` return value
0   0
1   1
2   10
... normal progression ...
9223372036854775806   111111111111111111111111111111111111111111111111111111111111110
9223372036854775807 (largest signed integer)   111111111111111111111111111111111111111111111111111111111111111 (63 1's)
-9223372036854775808 1000000000000000000000000000000000000000000000000000000000000000
... normal progression ...
-2 1111111111111111111111111111111111111111111111111111111111111110
-1 1111111111111111111111111111111111111111111111111111111111111111 (64 1's)

### Dönen Değerler

Binary string representation of `num`

### Örnekler

Örnek 1 decbin() example

`<?phpecho decbin(12) . "\n";echo decbin(26);?>`

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

```1100
11010```

### Ayrıca Bakınız

• bindec() - Binary to decimal
• decoct() - Decimal to octal
• dechex() - Decimal to hexadecimal
• base_convert() - Convert a number between arbitrary bases
• printf() - Biçemli bir dizge çıktılar, using `%b`, `%032b` or `%064b` as the format
• sprintf() - Biçemli bir dizge döndürür, using `%b`, `%032b` or `%064b` as the format

### User Contributed Notes 14 notes

29
MarcelG
10 years ago
`To add leading zeros I prefer the following:<?php// Add leading zeros\$bin = sprintf( "%08d", decbin( 26 )); // "00011010"?>`
rambabusaravanan at gmail dot com
7 years ago
`Print as binary format with leading zeros into a variable in one simple statement.<?php \$binary = sprintf('%08b', \$decimal); // \$decimal = 5; echo \$binary; // \$binary = "00000101";?>`
coverup
7 years ago
`Regarding trailing zeros, after test all the option mention here by others, i have performed my own tests regarding efficiency, here are the results:<?php\$decimal = 9;\$time_start = microtime(true);for (\$i=0;\$i<1000;\$i++){\$bin = printf('%08b', \$decimal);}\$time_end = microtime(true);\$time = \$time_end - \$time_start;echo "<hr>Duracion \$time segundos<br>\n";echo \$bin . '<br>';\$time_start = microtime(true);for (\$i=0;\$i<1000;\$i++){\$bin = sprintf( "%08d", decbin( \$decimal ));}\$time_end = microtime(true);\$time = \$time_end - \$time_start;echo "<hr>Duracion \$time segundos<br>\n";echo \$bin . '<br>';\$time_start = microtime(true);for (\$i=0;\$i<1000;\$i++){\$bin = decbin(\$decimal);\$bin = substr("00000000",0,8 - strlen(\$bin)) . \$bin;}\$time_end = microtime(true);\$time = \$time_end - \$time_start;echo "<hr>Duracion \$time segundos<br>\n";echo \$bin . '<br>';?>results0000100100001001000010010000100.... (output is echoed 1000 times)Duracion 0.0134768486023 segundos8Duracion 0.00054407119751 segundos00001001Duracion 0.000833988189697 segundos00001001Thus the winner is <?php\$bin = sprintf( "%08d", decbin( \$decimal ));?>`
Xavier Daull
18 years ago
`A fast function to convert a binary string to a bit sequence<?phpfunction BinString2BitSequence(\$mystring) { \$mybitseq = ""; \$end = strlen(\$mystring); for(\$i = 0 ; \$i < \$end; \$i++){ \$mybyte = decbin(ord(\$mystring[\$i])); // convert char to bit string \$mybitseq .= substr("00000000",0,8 - strlen(\$mybyte)) . \$mybyte; // 8 bit packed } return \$mybitseq;}echo BinString2BitSequence("ABCDEF"); // OUTPUT=010000010100001001000011010001000100010101000110?>`
Anonymous
18 years ago
`Just an example:If you convert 26 to bin you'll get 11010, which is 5 chars long. If you need the full 8-bit value use this:\$bin = decbin(26);\$bin = substr("00000000",0,8 - strlen(\$bin)) . \$bin;This will convert 11010 to 00011010.`
noname at example dot com
9 years ago
`If you want leading zeros use php built-in features instead of custom functions<?phpprintf('%08b', \$decimal);?>>> printf('%08b', E_NOTICE)>> 00001000`
dj.luiting(.a.t.)gmail.com
10 years ago
`hi folks, i struggled for a day to get a big decimal number converted into binary, on the windows platform.finally with bcmath functions this is what worked for me.function bc_convert2bin(\$string) { //got it to work with bcmath functions, works for 64 bit on 32 bit windows machine \$finished=0; \$base=2; \$bin_nr=''; if(preg_match("/[^0-9]/", \$string)) { for(\$i=0; \$string!=chr(\$i); \$i++) { \$dec_nr=\$i; } } else { \$dec_nr=\$string; } //while( \$dec_nr>\$base ) { while( bccomp(\$dec_nr,\$base) == 1 ) { //\$base=\$base*2; \$base=bcmul(\$base,'2'); //if(\$base>\$dec_nr) { if( bccomp(\$base,\$dec_nr) == 1 ) { //\$base=\$base/2; \$base=bcdiv(\$base,'2'); break; } } while(!\$finished) { //if((\$dec_nr-\$base)>0) { if( bccomp( bcsub(\$dec_nr,\$base) , 0) == 1 ) { //\$dec_nr=\$dec_nr-\$base; \$dec_nr=bcsub(\$dec_nr,\$base); \$bin_nr.=1; //\$base=\$base/2; \$base=bcdiv(\$base,'2'); //} elseif((\$dec_nr-\$base)<0) { } elseif( bccomp( bcsub(\$dec_nr,\$base) , 0) == -1 ) { \$bin_nr.=0; //\$base=\$base/2; \$base=bcdiv(\$base,'2'); //} elseif((\$dec_nr-\$base)==0) { } elseif( bccomp( bcsub(\$dec_nr,\$base) , 0) == 0 ) { \$bin_nr.=1; \$finished=1; //while(\$base>1) { while( bccomp(\$base,1) == 1 ) { \$bin_nr.=0; //\$base=\$base/2; \$base=bcdiv(\$base,'2'); } } } return \$bin_nr;}`
malcolm.murphy
7 years ago
`The GNU MP library (http://php.net/manual/en/book.gmp.php) provides methods to efficiently convert binary strings of any length to their binary representation (i.e., a `decbin` equivalent for strings).<?php\$str = random_bytes(1024); // binary string example\$result = gmp_strval(gmp_import(\$str), 2); // see manual for options such as endianness\$zeroPadded = sprintf('%0' . (strlen(\$str) * 8) . 's', \$result); // zero-pad if needed, e.g. with str_pad, or sprintf as shown here\$strAgain = gmp_export(gmp_init(\$result, 2)); // reverse operation similar to bindec?>`
php at silisoftware dot com
22 years ago
`Another larger-than-31-bit function.Works for very large numbers, but at the expense of perfect bit-precision as the size increases (I noticed rounding errors past 16 or so decimal places) so use with caution, and only when decbin() won't cut it.function Dec2Bin(\$number) { while (\$number >= 256) { \$bytes[] = ((\$number / 256) - (floor(\$number / 256))) * 256; \$number = floor(\$number / 256); } \$bytes[] = \$number; for (\$i=0;\$i<count(\$bytes);\$i++) { \$binstring = ((\$i == count(\$bytes) - 1) ? decbin(\$bytes[\$i]) : str_pad(decbin(\$bytes[\$i]), 8, "0", STR_PAD_LEFT)).\$binstring; } return \$binstring;}`
-1
Nitrogen
15 years ago
`Decimal to Binary conversion using the BCMath extension.<?phpfunction BCDec2Bin(\$Input='') { \$Output=''; if(preg_match("/^\d+\$/",\$Input)) { while(\$Input!='0') { \$Output.=chr(48+(\$Input{strlen(\$Input)-1}%2)); \$Input=BCDiv(\$Input,'2'); } \$Output=strrev(\$Output); } return((\$Output!='')?\$Output:'0');}?>This will simply convert from Base-10 to Base-2 using BCMath (arbitrary precision calculation).See also: my 'BCBin2Dec' function on the 'bindec' document.Enjoy,Nitrogen.`
-1
mcampa at gmail dot com
11 years ago
`A little useful little function that returns a binary string with leading 0s:function d2b(\$n) { return str_pad(decbin(\$n), 16, "0", STR_PAD_LEFT);}// example:echo d2b(E_ALL);echo d2b(E_ALL | E_STRICT);echo d2b(0xAA55);echo d2b(5);Output:0111011111111111011111111111111110101010010101010000000000000101`
-1
ajl at gmx dot de
22 years ago
```HERE you can convert 64bit instead of 32bit with the standard decbin <? function bigdecbin(\$dec,\$doublewords=1) { \$erg = ""; do { \$rest = \$dec%2147483648; if (\$rest<0) \$rest+=2147483648; \$erg = str_pad(decbin(\$rest),31,"0",STR_PAD_LEFT).\$erg; \$dec = (\$dec-\$rest)/2147483648; } while ((\$dec>0)&&(!(\$dec<1))); return str_pad(\$erg,\$doublewords*31,"0",STR_PAD_LEFT); } echo "<pre>"; for (\$i=1.5*2147483647.0-10;\$i<1.5*2147483647.0+10;\$i++) { echo "DEC:".\$i." BIN:".bigdecbin(\$i,2)."<br>"; } echo "</pre>"; ?>```
-2
Anonymous
19 years ago
`base_convert( base_convert('1000010001000000000100010010000100100000001111111111111111111',2,10),10,2);return'1000010001000000000100010010000100100000010000000000000000000'this function doesn't work`
-3
`<?phpPrint bindecValues("1023");function bindecValues(\$decimal, \$reverse=false, \$inverse=false) {/*1. This function takes a decimal, converts it to binary and returns the decimal values of each individual binary value (a 1) in the binary string. You can use larger decimal values if you pass them to the function as a string!2. The second optional parameter reverses the output.3. The third optional parameter inverses the binary string, eg 101 becomes 010.-- darkshad3 at yahoo dot com*/ \$bin = decbin(\$decimal); if (\$inverse) { \$bin = str_replace("0", "x", \$bin); \$bin = str_replace("1", "0", \$bin); \$bin = str_replace("x", "1", \$bin); } \$total = strlen(\$bin); \$stock = array(); for (\$i = 0; \$i < \$total; \$i++) { if (\$bin{\$i} != 0) { \$bin_2 = str_pad(\$bin{\$i}, \$total - \$i, 0); array_push(\$stock, bindec(\$bin_2)); } } \$reverse ? rsort(\$stock):sort(\$stock); return implode(", ", \$stock);}?>The printed result is : 1, 2, 4, 8, 16, 32, 64, 128, 256, 512`