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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机的存储容量一般用什么来表示_计算机常用的存储容量单位

    计算机的存储容量一般用什么来表示_计算机常用的存储容量单位存储容量是指存储器可以容纳的二进制信息量,用存储器中存储地址寄存器MAR的编址数与存储字位数的乘积表示。中文名存储容量所属学科计算机科学与技术存储容量单位简介语音网络上的所有信息都是以“位”(bit)为单位传递的,一个位就代表一个0或1。每8个位(bit)组成一个字节(byte)。字节是什么概念呢?一个英文字母就占用一个字节,也就是8位,一个汉字占用两个字节。一般位简写为小写字母“b”,字节简写为…

    2022年10月6日
    0
  • 零基础学Java难不难?

    零基础学Java难不难?很多同学在学Java前都会问零基础能学Java吗?Java到底难不难学?本文我就和大家唠唠这个事。有74%的人认为不难,说难学的仅占26%。

    2022年7月7日
    63
  • 调用usb摄像头_usb监控

    调用usb摄像头_usb监控在使用DirectShow控制USB摄像头的技术方面,需要做几件准备工作:1、安装DirectShowSDK,这个比较繁琐,具体可以网上搜索。2、配置开发工具的路径,如VS2008的相关包含的路径设置3、网上有示例代码,我的资源也上传了一个示例代码。主要对代码中可能遇到的问题进行总结:一般实现功能,包含两个,一个是实时预览,一个是控制拍摄一张图像。问题就是,这两个功能单

    2022年8月31日
    0
  • 最小生成树,克鲁斯卡尔算法入门。

    最小生成树,克鲁斯卡尔算法入门。

    2021年9月27日
    39
  • Java 实体对象转Map[通俗易懂]

    Java 实体对象转Map[通俗易懂]为了满足项目的参数传递,需要将实体对象转成map以满足业务需求,下面是实体对象转map的工具类。ObjectToMap.javaimportjava.util.Map;importjava.util.HashMap;importjava.lang.reflect.Field;publicclassObjectToMap{publicstaticMap<String,String>convert(Objectobject)throwsExcept.

    2022年5月16日
    40
  • linux使用ps命令查看和控制进程_shell查看进程

    linux使用ps命令查看和控制进程_shell查看进程ps命令Linuxps(英文全拼:processstatus)命令用于显示当前进程的状态,类似于windows的任务管理器查看所有进程ps-A显示所有进程信息,连同命令行ps-

    2022年7月31日
    3

发表回复

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

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