1024程序员节是什么意思(懂硬件的程序员多吗)

你真的懂啥是1024吗?今天就是一年一度的1024节了!packagecom.ocnyang.app;/***程序员们,1024快乐。*/publicclassHello1024{publicstaticfinalStringPROGRAM_APES=”程序猿”;publicstaticfinalStringPROGRAM_GIRL

大家好,又见面了,我是你们的朋友全栈君。

你真的懂啥是1024吗?

今天就是一年一度的1024节了!

package com.ocnyang.app;
/**
 * 程序员们,1024快乐。
 */
public class Hello1024 {
    public static final String PROGRAM_APES = "程序猿";
    public static final String PROGRAM_GIRLS = "程序媛"; //这个真不知道怎么翻译了
    public static final String DATE_1024 = "10月24日";

    public static void main(String args[]) {
        java.util.Calendar c = java.util.Calendar.getInstance();
        java.text.SimpleDateFormat f = new java.text.SimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");
        is1024(f.format(c.getTime()));
    }

    private static void is1024(String date) {
        if ((!android.text.TextUtils.isEmpty(date)) && date.contains(DATE_1024))
            System.out.println(PROGRAM_APES + "和" + PROGRAM_GIRLS + ",Happy 1024!");
    }
}

好吧并没有这个节,不过这个日子该庆祝啥,相信在座诸位很多人都懂的:

当然是庆祝二进制了!

1024是一个整数嘛。它等于 210,二进制表示为10000000000。

本来1024这种东西应该是数学家的玩具,但是不幸我们有了电脑,而电脑是基于二进制运行的,所以这个奇怪的数字就变得人尽皆知了……

一个来自巧合的单位

因为电脑的运行和存储都基于二进制,所以内存也好磁盘也好闪存也好,理论总容量应该是2的某次幂。老一些的内存都是64M、128M、256M、512M这样的数字,更老一些的电脑开机自检会在屏幕上读出内存容量,往往还要读3遍,经常能看到16384kB、65536kB这样的数字——这些也都是2的次幂。

1024程序员节是什么意思(懂硬件的程序员多吗)

1024

可能今天多数人对2的次幂主要的熟悉来源,是2048这个游戏。虽然2048是明确复刻了1024,而1024则是抄袭了”Three!”的创意,但这种事情这里就不要提了吧。图片来源:imgur.com

但最常用的2次幂,当然还是1024——它是计算机领域的基本倍数:1M = 1024k,1G = 1024M,等等。

问题来了!1024和1000太接近了——一个有趣而有用的巧合,正因此它成了计算机的基本倍数;但另一些时候就烦人了。

210 ≈ 103,这个巧合在估算的时候很管用。比如想知道262是多少,就把它拆成260 × 22,前者约等于1018,后者等于4,因此就是4×1018。(实际上大约是4.61×1018,相差不大。)

但这只是数量级上相差不大,1024毕竟不等于1000。如果你买了一个4600T的硬盘,结果到手只有4000T,你可能就不开心了。

到底是1000还是1024?

其实现在硬盘几乎都在玩这个花招。计算机内部计算都是按照1024来算的,但是销售时却都会按照1000来宣称。比如我现在这个标称为500G的硬盘,实际上总可用空间是接近500000000000字节,对于计算机来说,只有465G。

1024程序员节是什么意思(懂硬件的程序员多吗)

1000or1024

然而你又不太好说他们错——k啊M啊这些前缀,都是从科学计数法的前缀里拿来的,人家本来就是指1000,只是在电脑里成了1024。这些前缀都来自希腊语:

  • kilo是1795年法国人设立公制的时候从希腊语改来的词,本来是1000,但计算机里1kB = 1024B;
  • Mega来自希腊文“大”,1947年在科学计数法里确立为1000k,在计算机里就是1024k;
  • Giga来自希腊文“非常大”,在科学计数法是1000M,计算机是1024M;
  • Tera来自希腊文“怪物”,在科学计数法是1000G,计算机是1024G;
  • Peta来自希腊文“五”,因为正常的大词用完了,于是改用“第五个1000”这种意思。在科学计数法是1000T,计算机是1024T。其实本来五应该写作penta,但是因为上一个词——Tera正好比“四”Tetra少一个字母,所以Peta也是故意去掉了中间的字母来保证不会和原词相混;
  • Exa来自希腊文“六”,和hexa同根,但这次希腊文自己就没有保留那个“h”,所以沿用了;
  • Zetta是本系列里唯一的异类。正常的希腊文“七”前缀应该是hepta,但没有使用,反而用了希腊数字体系里的Ζʹ(读作zeta);
  • Yotta则回归本源,来自希腊文“八”。

一般用户几乎不会接触到P以上的级别。在T这一级上,二者的差距不到10%,大家通常也就忍了。

为了避免混淆,国际电工委员会(IEC)提出过一个标准:IEC 80000-13。在这个标准下,科学计数法(1000)按照正常标记,而计算机领域(1024)则全都加一个小写i。因此,1kB就是1000B,而1KiB才是1024B;1 MiB = 1024 KiB,1 GiB = 1024 MiB,等等。不幸的是,这个标准没有得到很广泛的使用,现在大家还是都是乱来的。

最先用1024的可能是……埃及人?

大家平常喜欢说是中国人发明了二进制。这么说倒也不是不可以,二进制正式进入数学体系要归功于莱布尼兹,而莱布尼兹很喜欢中国,明确认为《易》所用的八卦和六十四卦就是一种二进制。但是古代中国人并没有使用这些二进制数进行计算。单纯说构想出二进制表达数字的办法,那很多文明都干过;然而古埃及人有一种乘法,真的是在用相当于二进制的方式来运算了。

比如,计算1262 × 13,他们会这样计算:

1262 × 13 
= (1024 + 128 + 64 + 32 + 8 + 4 + 2) × 13
= 1024 ×  13 + 128 × 13 + 64 × 13 + 32 × 13 + 8 × 13 + 4 × 13 + 2 × 13
= 13312 + 1664 + 832 + 416 + 104 + 52 + 26
= 16406

等等,这是在干啥?

如果我们来做乘法的话,那么我们会:

1262 × 13 
= 1000 × 13 + 200 × 13 + 60 × 13 + 2 × 13

……好像也差不多。

对,古埃及人也是把大数拆成小数来算乘法,但是我们拆成10、100、1000的倍数,而他们则拆成2、4、8、16、32、64……的倍数。这是二进制呀!

虽然不那么直观,但是二进制也有它的好处:便于不动脑查表格。按照我们十进制乘法,每一位都有10种可能:千位可能没有,也可能是1000、2000、3000、4000……9000。这样表格上就得留出9个位置。但是二进制乘法下,每一位要么有,要么没有。虽然要拆的次数变成了三倍(还记得为什么是三倍吗),但拆完之后就省事儿了。

这种计算方式并没有对后代产生很大影响,但每次我们敲出1024的时候,除了达盖尔的旗帜之外,似乎还是值得缅怀一下古埃及人?
摘录

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127640.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 网页自动跳转 5种方法

    网页自动跳转 5种方法转自:https://jingyan.baidu.com/article/36d6ed1f3c03c01bcf4883c9.html网页自动跳转5种方法利用HTML标记(META中的REFRESH属性)用HTML标记,就是用META的REFRESH标记,举例如下:其中content=10是10秒钟后跳转【5种常见网页自动跳转方法】网页自动跳

  • c++中map遍历_怎么遍历map集合

    c++中map遍历_怎么遍历map集合C++结构化绑定声明在map容器遍历上的应用

  • Pytest(15)pytest分布式执行用例「建议收藏」

    Pytest(15)pytest分布式执行用例「建议收藏」前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

  • pycharm 2021.12.13最新版激活【最新永久激活】

    (pycharm 2021.12.13最新版激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html2JTX0APX6F-eyJsa…

  • web端功能测试怎么测_web的主要功能是什么

    web端功能测试怎么测_web的主要功能是什么一、功能测试1.1链接测试链接是web应用系统的一个很重要的特征,主要是用于页面之间切换跳转,指导用户去一些不知道地址的页面的主要手段,链接测试一般关注三点:1)链接是否按照既定指示那样,确实链

  • Nacos 2.0_一个数的0倍是多少

    Nacos 2.0_一个数的0倍是多少点击关注公众号,Java干货及时送达3月20号,Nacos2.0.0正式发布了!Nacos简介:“一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。通俗点讲,Nacos…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号