求解 使用php将1000位的十进制大数转成二进制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解 使用php将1000位的十进制大数转成二进制相关的知识,希望对你有一定的参考价值。

1212111111114141790830841027.............1242545234234897601换换成二进制输出二不溢出

下面的代码测试通过的,我只用几10位进行测试,理论上成千上万位结果也是正确的,供你参考,算法比较笨蛋(完全模仿人工的除2取余):

<?php
//超大整数(10进制)转换为二进制数
$n=\'12121111111141417908308410289576890247569807456709384756890743906790486790845\';
//$n=\'15\';//1111
//$n=\'257\';//100000001
$r=\'\';//结果
while ($n)
  //$n整除2,商$m、余数$k
  $k=0;
  $m=\'\';
  do
    $k=$k*10 + substr($n,0,1);
    if ($m!=\'\' || $k>1) $m.=floor($k/2);
    $k=$k % 2;
    $n=substr($n,1);
    //$r=$k . $r;
  while($n!=\'\');
  //echo "r=$r;m=$m\\n";//break;
  //下一轮除法
  $n=$m;
  $r=$k . $r;

echo $r;
?>
参考技术A 意义是什么?你要做什么功能

二进制,八进制,十六进制,转成十进制

了解二进制转十进制之前,先了解一下一个字节多少位,O(∩_∩)O哈哈~

什么是位、字节、字、KB、MB呢?

  1. 位  "位(bit)"是电子计算机中最小的数据单位。每一位的状态只能是0或1。

  2. 字节  8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。

  3. 字  "字"由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长。例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。字是计算机进行数据处理和运算的单位。

  4. KB  在一般的计量单位中,通常K表示1000。例如:1公里= 1000米,经常被写为1km;1公斤=1000克,写为1kg。同样K在二进制中也有类似的含义。只是这时K表示1024,也就是2的10次 方。1KB表示1K个Byte,也就是1024个字节。

  5. MB  计量单位中的M(兆)是10的6次方,见到M自然想起要在该数值的后边续上六个0,即扩大一百万倍。在二进制中,MB也表示到了百万级的数量级,但1MB不正好等于1000000字节,而是1048576字节,即 1MB = 2E+20 Bytes = 1048576Bytes。

计算中一般二进制转十进制 需要补齐八位

二进制 : 00101010

  二进制 转十进制

    整数二进制转换为十进制:首先将二进制数补齐位数,首位如果是0就代表是正整数,如果首位是1则代表是负整数。

          先看首位是0的正整数,补齐位数以后,将二进制中的位数分别将下边对应的值相乘,然后相加得到的就为十进制,比如1010转换为十进制

    0 0 0 0 1 0 1 0

    0*2^7 + 0*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0

    0+ 0+ 0+ 0 + 8+ 0+ 2 + 0 = 10

    结果:10

  十进制 转二进制

  

  42为十进制数,除以2 取余数 为010101,然后取反101010 也即规范的写法为(42)(00101010)

 

八进制: 01234567

  八进制 转十进制 

    72.45(八进制)

    7*8^1 + 2*8^0 + 4*8^(-1) + 5*8^(-2) 

    56 + 2 + 0.5 + 0.078125

    结果:58.578125(十进制结果)

  十进制 转八进制

  136(十进制数) (原理除以8取余数),然后取反,如下图:

  

  结果:210(八进制数)

十六进制: 0123456789ABCEDF 

      A:代表10

      B:代表11

      C:代表12

      D:代表13

      E:代表14

      F:代表15

  十六进制 转十进制

  2AF5(十六进制数)

  2*16^3 + A*16^2 + F*16^1+ 5*16^0

  8192+ 10*256 + 15*16 + 5 = 10997

  结果: 10997(十进制数)

  十进制 转十六进制(除以16取余数,然后取反原理都是类似的)

  1610(十进制数)

  1610/16 = 100 ……10(A)

  100/16 = 6……4

  6/16 = 0 ……6

  结果:64A(十六进制数)

 

以上是关于求解 使用php将1000位的十进制大数转成二进制的主要内容,如果未能解决你的问题,请参考以下文章

C语言 数组类型转换,怎样将一个float类型的数组转换成字符(串)数组?

php中如何将图片转成二进制呢

EXCEL2007中最多可以转10位二进制的数,我想把40位的二进制转成十进制的数,有啥办法?

数字逻辑8421BCD码换成十进制和二进制数

HDU 1314 Numerically Speaking(大数加减乘除+另类二十六进制互相转换)

oj---九度oj----大数---进制转换