在直面标题中的问题之前,先思考一个问题,什么是记数?
很简单,就是用某种符号把数量记下来嘛。它所涉及的一套规则叫记数系统(numeral system),也称为记数法。
比如,用A代表第一个数,往后每增加一个,就依次用B,C,······,Z代表,若继续增加,那就用AA,AB,AC,······,ZZ,AAA等等来代表了。用过Excel表的人都知道,它的列编号所采用的就是这种记数法。
再比如计算机中采用的二进制(binary),用0代表无,用1代表第一个数,往后每增加一个,就依次用10,11,100,101,110等代表。
而最通行的所谓“十进制”,英文名decimalism, 它的做法是:
用0代表无联通大流量卡,用1代表第一个数,往后每增加一个依次用2,3,······,9代表,接下来若继续增加,那就依次是10,11,12,······这些。
被称作“N进制”的记数法还有很多,例如三进制(ternary),八进制(octal),十六进制(hexadecimal)等。实际上,任何非零整数进制都存在,当然包括一进制,它叫unary numeral system。
先声明下,“进制”这个说法是中文特有的,强调记数中“逢N进1”的规则,但实际上这并不是记数法本身的要求。关于这一点,本文后面会讲到。
现在我们先来看,这些记数法背后有什么共同的道理呢?
为了搞清楚这个问题,我们不妨从人类最简单的记数法讲起。
想象你穿越到联通大流量卡10万年前,假设那时的你幸运的还是一个人,你现在负责记录你们部落猎物的数量,你该怎么做呢?
原始人用棍棒记数
没错,用棍棒来记数!一根棍棒代表一个猎物,每增加一个猎物就增加一根棍棒。但这样工作量太大,如果打的猎物太多,棍棒不够用了,怎么办?
“奈何姓万”的故事
聪明的你马上想到:能不能用有限的棍棒来表示任意数呢?
没错,你这灵光一闪,就代表人类开始思考抽象的记数问题了!
棍棒,或各种兽骨等物件,有各种不同的形状,若将它们看作一个个不同符号,那么,有限个不同形状的物件就构成了一个有限符号集。从这里面取出任意个符号(可重复),它们的每个排列就代表一个数。
原始人的记数工具
可是,问题来了,这些符号的排列表示数的规联通大流量卡则是什么呢?
这就是记数的核心问题了 !
为了更清晰地阐述,我们先明确三个概念。
第一个概念,用来记数的符号——数字(digit),也叫数位符。不仅包括阿拉伯数字,各种字母也可用作数字,常见的如英文大写字母。要注意区分数字与数,数(number)由数字排列而成,例如“101”和“AA”都是数,单个数字本身也是一个数。
第二个概念,数位符构成的集合,我们称之为数位集(digit set)。例如前面提到的第一种记数,它的数位集是26个大写英文字母的集合。二进制的数位集是{0,1,2},十进制的数位集是{0,1,2,3,···,9}。
第三个概念,数字符号与整数值之间的对应关系,叫整数数值函数,用 表示,它的定联通大流量卡义域是数位集,而它的值域是整数。
需要指出的是,这里的“整数”二字是形式上的、与具体的记数法无关的整数。就像本文前面提到的三种记数时说的那样,它是指按“从第一个数开始,每增加一个就加一”的规则来计数(counting)时,所得到的那个抽象的整数。
讲到这里,也要顺便说下,计数与记数是不同的。计数是一种重复增一或减一的行为,它对应的结果是存在于大脑中天然抽象数值;而记数则是数的某种记录方式,是表示数的符号系统给出的结果。
当然,在实际中,这个所谓的“抽象整数”一般总是用我们熟悉的十进制来兑现表示的,毕竟抽象的数只存在于大脑中,无法直接表示出来嘛!
对于前面提到的Excel表的列记数中,函数 是全部英文大写联通大流量卡字母与等量个整数之间的一一映射。例如 。
而对一般的“N进制”记数法来说,若数字的值就是它作为一个数(number)时的值,则 是一个恒等函数(identity function),因此可用字符 直接替代
,例如二进制,八进制,十进制都是如此。
但N超过10的“N进制”,其数位集包含一些其他字符,例如十六进制的数位集为{0,1,2,3,···,9,A,B,C,D,E,F},故十六进制的数值函数为
三个概念讲完了,现在来看,用数位符怎么表示数?
若干个数位符(可重复)的一个排列就表示一个数,我们称之为记数(numeration)。一个排列中有几个数位符,则这个数就是几位数。
一个简单的例子,十进制下的数字串“20联通大流量卡45”代表的数值(value)为
若这个数字串是八进制的话,那它的值为 算出来就是1061。
显然,这里的值是用十进制表示的,既然数值应该是与任何记数法无关的抽象计数结果,这并不是必须的。但十进制是所有人最熟悉的记数表示,所以就用十进制了。后面凡说到数值,也都默认用十进制表示。
根据这两个例子,相信读者能看出,某种b进制记数法下的一个字符排列 代表一个整数,其值为 如果引入小数点到字符排列中,则上述记数法可推广到小数,例如b进制下 代表的数值为 例如,8进制下的0.124的值为 这种数的表示具有递归(recursion)的特点,以整数为例即
据此递归性质,当一个数的首位是0时,由于 ,这表明 因此数最左边的0是多余的联通大流量卡。考虑到这一点,有些人习惯在记录整数位只是单个零的小数时,可忽略那个零,例如将“0.123”直接写作“.123”。
上式还透露一个有趣的事实是,对0这个数,按上述规则,它自身也可以被拿掉,这就导致 右边是空的?没错!这正是0的意义——它代表什么也没有。
好了,以上就是最常见的记数法的规则。
我们看到,N进制数位集中并不包含数N对应的字符,例如二进制中没有2,三进制中没有3,八进制中没有8。所以,若把二进制说成2进制,把八进制说成8进制,就不够严谨了。
其实,英语对此也是不失严谨的,各个“N进制”的名称中都避免出现对应的数字,例如二进制叫binary,八进制叫octal,等等。
N进制中对应的N的那个数,因联通大流量卡为已经超出数位集本身的范围,需要用1和0的排列来表示。
二进制中的10代表数位符1和0的一个排列,它读作“one zero”或“一零”,八进制中也如此,而十进制中的10也一样是如此!
也就是说,“10”一定不是“十”的对应的数位符——数位符必须是单个字符嘛!它的真实身份是字符集中的1和0的一个排列,应读作“一零”,而非“十”。
你可能会说:“10”在其他进制中的确不是“十”,但在十进制中不正好就是“十”吗?既然如此,那读作“十”不正好吗?
对大多数人来说,这么做的确无可厚非。
但是你知道,“十”既然是一个汉语的单音节语素,它应该对应单个字符,将其对应一个数字的排列“10”是不太妥当的。
你可能会问:按你这联通大流量卡说的,十进制下的“20”读作“二十”不可以,应读作“二零”?
那倒不是这样,在十进制下,“20”的数值的确就是“二十”,而且因为它有两个音节,不会被误以为是一个数位符,所以这么读是完全没问题的。
其实十进制下的“10”,你若读作“一十”,那比读作“十”更合适。
这么说吧,面对一个由数位符排列形成的数,你可以有两种读法。
第一种是当字符复读机,直接念数位符。例如,“1020”就读“一零二零”,管它是什么进制的数,反正总不会错。虽然这么做有点机器般的冷酷感觉,但这也许是大多数搞计算机的人最惬意的读法。
第二种是按照具体的进制,准确地读出它作为一个抽象天然数所具有的真实值。例如十进制下,“10”读作“十”,八联通大流量卡进制下的“10”读作“八”。
第二种方法虽然美丽,但当你面对一个非十进制的数时,习惯十进制的你,需要快速的读出它的值可不那么容易哦!
即使是熟悉的十进制,面对一长串数字,坦白讲,笔者有时也会读错。更别说听写英语数了,要是一个个念字符就好了。
这个你可能用得着
实际上,第二种方法不再是单纯记数了,而是计数——给出天然抽象数的真实值。在前面提到的记数系统中的整数数值函数就是干这件事,但好在它只需要干很少次——数位集的长度对应的次数。
显然,对一个懒惰的码农来说,他当然会毫不犹豫地选择第一种方案。
我很懒,但我的代码可靠!
当然,若你觉得没必要纠结这些细节,也没关系,因为在你坚持把“10”读作“十”时,应该不会有联通大流量卡人和你抬杠的。
至此,关于“N进制”记数法,我们讲完了。
但大家有没有意识到,我们熟知的“逢N进1”的规则似乎被忽略了?
的确,但本就该如此!
因为“逢N进1”这件事是当你计数(不是记数)时,为了得到正确的记数,你需要做的事,它与记数规则本身没什么关系。
前面说过,所谓计数,简单的说,就是在数数时不断加一减一。
对N进制的数来说,当对末位数字是N-1的数加1时,末位要变成0,而倒数第二位则要增1,这就是末位的进位;若倒数第二位增1之前也是N-1,则同样也要进位,直到抵达某个小于N-1的数字,进位停止。
虽然常见的记数法都满足这个规律,但若看Excel表中列的记数法,因为它的数位集中不含0,所以它并不是按这种联通大流量卡“逢N进1”的规则来记数的,例如Z后面是AA而非A0,这是怎么回事呢?
这个问题涉及另一种类型的记数法,叫做双射(bijective)记数法。而我们常见的十进制属于标准(standard)记数法,除此之外,还有一种叫平衡(balanced)记数法。
在弄懂这些不同类型的记数法之后,你一定会对记数问题有更深入的理解,例如你会理解“一进制”为什么是可以存在的,并能理解各种奇异的记数法存在的合理性,包括负二进制,Π进制,2i进制等等。
同时,你还会发现,“逢N进1”并不是记数法本身要求的。
虽然所有记数法的英文名称中并无“进位”之义,但在中文里,所有记数法的名称都具有“x进制”的形式,个中缘由,笔者没有细究联通大流量卡。
好了,关于记数法,就先讲到这里吧。
参考文献
https://www.britannica.com/science/numeral
https://en.wikipedia.org/wiki/Numeral_system
https://en.wikipedia.org/wiki/Bijective_numeration
https://www.geeksforgeeks.org/number-system-in-maths/
END
转载内容仅代表作者观点
不代表中科院物理所立场
如需转载请联系原公众号
来源:物含妙理
编辑:花卷
友情提醒: 请添加客服微信进行免费领取流量卡!
QQ交流群:226333560 站长微信:qgzmt2
原创文章,作者:sunyaqun,如若转载,请注明出处:https://www.dallk.cn/13769.html