惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
T
Tenable Blog
博客园_首页
S
Securelist
Spread Privacy
Spread Privacy
Google Online Security Blog
Google Online Security Blog
Forbes - Security
Forbes - Security
Engineering at Meta
Engineering at Meta
U
Unit 42
L
LINUX DO - 热门话题
量子位
T
Threat Research - Cisco Blogs
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
Martin Fowler
Martin Fowler
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Latest
Security Latest
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
V2EX - 技术
V2EX - 技术
T
Tailwind CSS Blog
月光博客
月光博客
Recent Announcements
Recent Announcements
G
Google Developers Blog
F
Full Disclosure
W
WeLiveSecurity
宝玉的分享
宝玉的分享
腾讯CDC
G
GRAHAM CLULEY
Vercel News
Vercel News
Simon Willison's Weblog
Simon Willison's Weblog
美团技术团队
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security

Surmon.me

一人有限集团 你就是不敢 创造力是温柔的谎言 人类正在退出人类 AI 代替不了这样的你 脉冲点火背后的架构设计 基于 Cloudflare 生态的 AI Agent 实现 NodePress 支持用户登录了 从统计学习到通用智能 2025 投资报告:走慢的路 无依之地 会杀人的菩萨 无我不是共识 文化的积重与偏见 当下即安 科学的尽头是态度 无我不是 Egoless 信仰不因恐惧而存在 世间无解的矛与盾 先别急着做些什么 佛不需要你的皈依 真理的幻觉 两扇大门 造心里的浮屠 自胜者强 逻辑与智慧 真的相 快乐的秘密 只需愿意 是名体验 最深沉的梦 森林里倒下的树 现象与相 庸人自扰 React 与 Vue 的完美融合 开心就好吗 与原生家庭和解 两支毒箭 怎么自净其意 一尘不染 一片白云 让风穿膛而过 喝下去,然后闭嘴 活在当下 当纠结发生时 唯「我」独尊 一场把戏(时间) 一场把戏(二元对立) “我” 和 “我” 谁是众生? 船里没有人 玫瑰不需要说话 没有人能渡任何人 你我为轮,使之不再 当我们在谈论独立时 自我约束就是最好的自我接纳 从善与恶的表象出发 佛法不是心理学 别人眼中的你并不是你 高高山上走 祝你心想事成 祝你的噩梦早日发生 道是无情却有情 裙子只为自己而穿 不要盲目地评估自己 先别急着 “爱自己” 让生命欣然舞动 你无法复制乔布斯 符号不是目的 如果一件事发生了 每当我起心动念时 爱出者爱返 理解不是尊重的基础 在没有解决自己的问题之前 “知足常乐” 不是比较 逻辑是无法成为信仰的 买不到的自由 成为诵经者 伤口听不懂大道理 是立场让你不自由 - Unfreedom 天雨大不润无根之草 做自己的神 当心诱惑本身 牛洞冥思录 修罗启示录 让大脑自举 我更喜欢叫它无梦寺 存在主义也许不是解药 出南洋记 2022 的所有答复 没意义的表达 思考的记录 故宫暂行之幻想 极端的比较 解构的终极 舍利子是如何炼成的 心要野 佛教的偏见 文艺青年 我是动物
IP 地址如何转化为最小的数字?
Surmon · 2018-09-13 · via Surmon.me

存储

我们首先要知道计算机是怎么存储数据的。

如何存储 0 和 1

在计算机中所有的数据都被存储为一连串的二进制信息,0 和 1。

内存条中间有一块块方块,每个方块上就有很多存 0 和 1 的机关,可以把一个机关想象成一个圆点,一个圆点就是一个电池,那么就有了下面几个环节。

假设我们每个圆点都是一个小电池,当我们要存储时,先选定一列圆点,开始每行充电,如果是 1 就充电,是 0 就不充电。由于这样是无法存储电量的,充电的速度是几纳秒,耗电的速度是几毫秒,计算机采取的做法是在耗完电之前再充一次,这里就依赖 CPU 的赫兹数值,CPU 的多少赫兹就代表每秒可以充多少次电,即代表着CPU的性能高低。

如何存储数字

我们平时所说的数值一般都是十进制的,但计算机只能存储 0 和 1,所以需要将十进制的数转为二进制让计算机进行储存。

但也有一些特殊情况,如果想存 -3 就需要使用补码(计算机无法存储负号); 如果想存 0.75 就需要使用浮点数(计算机无法存储小数点)。

存储单位

比特 bit

比特,bit,位,计算机中最小的存储单位。

01 就是一个二进制数字,也叫二进制位,这么一个二进制数字占用的空间单位就是 1bit。

字节 Byte

8个二进制位为一个字节(B),即 1B = 8bit

十进制数字的 6 转换为二进制为 00000110,由八个二进制位组成(不足则以0补位)。

Kilo Byte

1 Kilo Byte (KB) = 1024 B

其他类推

  • 1 Mega Byt (MB) = 1024 KB
  • 1 Giga Byte (GB) = 1024 MB
  • 1 Tera Byt (TB) = 1024 GB
  • 1 Peta Byt (PB) = 1024 TB
  • 1 Exa Byt (EB) = 1024 PB
  • 1 Zetta Byt (ZB) = 1024 EB
  • 1 Yotta Byt (YB) = 1024 ZB
  • 1 Bronto Byt (BB) = 1024 YB
  • 1 Nona Byt (NB) = 1024 BB
  • 1 Dogga Byt (DB) = 1024 NB
  • 1 Corydon Byt (CB) = 1024 DB
  • 1 Xero Byte (XB) = 1024 CB

为什么是 1024

目前计算机都是二进制的,让它们计算单位,只有2的整数幂时才能非常方便计算机计算,因为电脑内部的电路工作有高电平和低电平两种状态,所以就用二进制来表示信号(控制信号和数据),以便计算机识别。

而人习惯于使用10进制,所以存储器厂商们才用1000作进率。这样导致的后果就是实际容量要比标称容量少,不过这是合法的。1024是2的10次方,因为如果取大了,不接近10的整数次方,不方便人们计算;取小了,进率太低,单位要更多才能满足需求,所以取2的10次方正好。

IP 地址

IP 地址看起来是由以 "." 分割的四段十进制数字组成,每一段的数字转为二进制都是一个 8 位二进制数字。

看一个很常见的 IP 地址:

123.125.114.144

01111011.01111101.01110010.10010000

所以 IP 地址一共是由32位二进制数字组成的。

点分十进制表示法只是为了让人好记忆,并不能用于电脑运算; 数据库中跟 IP 地址有的字段一般都会存成整数,这样便于查询,也可以提高查询速度。

So,怎么把 IP 地址转换为一个最小的十进制正整数用于存储?

怎么算

笨办法

        
        

1234

function ipToNumber(ip) { const [a, b, c, d] = ip.split('.').map(i => Number(i)) return a*256*256*256 + b*256*256 + c*256 + d }

16进制字符

每8位转成16进制字符,拼接后转整数。

        
        

123456

function ipToNumber(ip) { return parseInt(ip.replace(/\d+\.?/ig, item => { item = parseInt(item) return (item > 15 ? '' : '0') + item.toString(16) }), 16) }

位移

        
        

12345

function ipToNumber(ip) { return ip.split('.').reduce((ipInt, octet) => { return (ipInt << 8) + parseInt(octet, 10) }, 0) >>> 0 }

参考资料: (一) (二) (三)