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的时候,除了达盖尔的旗帜之外,似乎还是值得缅怀一下古埃及人?
摘录

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安卓so文件解密_Android是什么文件

    安卓so文件解密_Android是什么文件作者论坛账号:genliese1.前言一道so文件动态加解密的CrackMe,运行时解密要执行的函数,且在执行后立马加密CrackMe:dex文件加的数字壳,so文件无壳,因为反调试,所以so文件采用全静态分析分析环境:脱壳工具:FARTGDAIDAFridaPyCharmVSCode2.分析过程2.1脱壳拿到FART定制ROM下跑,得到想要的dex文件,数字壳抹去了前八个字节的dex文件魔…

    2022年9月14日
    4
  • 匿名函数调用方法_javascript匿名函数

    匿名函数调用方法_javascript匿名函数首先看一下普通函数和匿名函数的区别//普通函数functionsum(a,b){ returna+b; console.log(“我是一个普通函数”) }//匿名函数,不能单独使用function(a,b){ returna+b; console.log(“我是一个匿名函数”) }没错,匿名函数简单来说就是普通函数去掉名字,但是他不能单独定义与使用,下面是匿名函数的一些使用场景:用于函数表达式、作为返回值、用于定义对象方法、作为回调函数、用于立即执行函数、用于DOM元素注

    2022年10月3日
    2
  • 分布式缓存之memcached–命令测试

    1.启动Memcache常用参数2.基本命令五种基本memcached命令执行最简单的操作。这些命令和操作包括:前三个命令是用于操作存储在memcached中的键值对的标准修改命令。

    2021年12月28日
    35
  • leetcode归并排序_如何进行区间筛选

    leetcode归并排序_如何进行区间筛选以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals = [[1,4],[4,5

    2022年8月9日
    6
  • CUDA—使用GPU暴力激活成功教程密码

    CUDA—使用GPU暴力激活成功教程密码GPU支持大规模的并行加速运算,胜在量上,CPU处理大量的并行运算显得力不从心,它是胜在逻辑上。利用显卡加速的应用越来越多,但如果说GPU即将或最终将替代CPU还有点言过其实,二者最终将优势互补,各尽所能。使用显卡的无脑并行运算激活成功教程密码是一个不错的选择。这里选择一种简单的情况,限定密码是6位纯数字,并且不限定输入次数,这种情况下可以使用GPU暴力激活成功教程,当然…

    2022年8月22日
    5
  • document.documentElement.clientHeight「建议收藏」

    document.documentElement.clientHeight「建议收藏」于获取各种浏览器可见窗口大小的一点点研究functiongetInfo(){vars=””;s=”网页可见区域宽:”document.body.clientWidth;s=”网页可见区域高:”document.body.clientHeight;s=”网页可见区域宽:”document.body.offsetWidth”(包括边线和滚

    2025年10月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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