1

前言

  对于程序员的世界,一切东西皆二进制。

PHP整型长度与二进制原理

  我们一直说的整型有32位,很多人都说整型数最大值有2^32 -1,其实这个相对于无符号整型数,那么这里来谈论下有符号整型数。一个整型占四个字节,每个字节有8bit,假设一个整数3 可以表达为:
在这里为了方便观察,八位隔开,真正意义上来说,它是连续的。
00000000 00000000 00000000 00000011
SUM = 2^0 + 2^1 = 3
那么怎么表示正负数?规定中,有符号整型数,第32位为0代表正,1则为负
所以-1这么表示
10000000 00000000 00000000 00000001
最大正整数就可以这么表示
01111111 11111111 11111111 11111111
SUM = 2^0 + 2^1 + 2^2·······
可以发现,这个变成了我们高中数学,求等比数列前N项和
重温下公式:
Sn = (1-q^n)/(1-q)
前面公式可以看出公比为2,有31项。
Sn = 2^31 - 1
所以要记住,有符号整型最大值为2^31 - 1 = 2147483647
最小值却是-2147483648,有兴趣研究可以百度之。

IP地址的计算

  根据常识,IP的每一位的区域只有在0-255区间。根据它的二进制就明了。
比如IP 127.0.0.1
01111111 00000000 00000000 00000001
IP每位区间只能在 [00000000,11111111]
套公式计算一下,[0,255]

开发中的应用

  • IP字符串与整型的互换

    PHP确实是好东西,帮我们弄了两个函数`ip2long()`,`long2ip()`,代码说话:
<?php
    $ip = '192.168.104.120';
    var_dump($ip);
    $ip = ip2long($ip);
    var_dump($ip);
    $ip = long2ip($ip);
    var_dump($ip)
?>

三个var_dump类型分别为string,int,string
这个的应用的话,有一点是很实在的,那就是存SQL。
1.一个整型用的空间比一串字符串来的小。
2.SQL查询的话,数字效率是高于字符串的。
其他还有很多,期待其他同学补充。


谢远东
4.5k 声望72 粉丝

Go Go Go