为什么我们使用计数和记数的方法大都是十进制的?
最近找到一本书《十万个为什么》,1970年由上海人民出版社出版,本文是其中一篇文章《为什么我们使用计数和记数的方法大都是十进制的?》。
伟大领袖毛主席教导我们:“胸中有‘数’。这是说,对情况和问题一定要注意到它们的数量方面,要有基本的数量的分析”。我们在阶级斗争、生产斗争和科学实验三大革命运动中,必须注意事物的数量方面,才能把事情办好。譬如,生产队长在分配劳动任务时,必须根据农活的种类和数量,统计出勤的劳动力有多少,一二三等劳动力各有多少、男女劳动力各有多少等等,然后结合个人的具体情况,适当组织劳动力,充分发挥每一个人的作用,以便高质量高产地完成劳动。
我们在计数的时候,从一、二、三、四、五、六、七、八、九到十,一共创造了十个数字,从十以上,就是十一、十二、十三……一直到一百,才用上一个新的数位“百”,而一百刚刚是十个十。从一百以上,要到一千才用上一个新的数位“千”,而一千刚刚是十个百,如此等等。这样的计数法,叫做十进位计数法。
同样的,我们在记数的时候,也只用了十个数字,那就是:0、1、2、3、4、5、6、7、8、9。比9大1的这个数十,用10来表示,从11、12、13……到19很容 ...
Java的整数数制和位移运算符
Java 的整数数制Java 中,整数可以通过二进制、十进制和十六进制表示:
二进制:使用数字 0 和 1 表示一个整数,通过加上前缀 0b 表示。
十进制:使用数字 0~9 十个数表示一个整数。
十六进制:使用数字 0~9 和字母 A~F 表示一个整数,通过加上前缀 0x 表示。
位移运算符Java 中,位移运算符有<<,>>,>>>三个。
左移运算符(<<):向左移动指定位,右边的空位以 0 来补充。
右移运算符(>>):向右移动指定位,左边的空位通过符号位来补充。(正数符号位为 0,负数符号位为 1)
无符号右移运算符(>>>):向右移动指定位,左边的空位以 0 来补充。
诫子书——诸葛亮
夫君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。夫学须静也,才须学也,非学无以广才,非志无以致远。淫慢则不能励精,险躁则不能治性。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及。
The Google Chrome Comic
漫画
来源Chrome comic
未有天才之前——鲁迅
我自己觉得我的讲话不能使诸君有益或者有趣,因为我实在不知道什么事,但推托拖延得太长久了,所以终于不能不到这里来说几句。
我看现在许多人对于文艺界的要求的呼声之中,要求天才的产生也可以算是很盛大的了,这显然可以反证两件事:一是中国现在没有一个天才,二是大家对于现在的艺术的厌薄。天才究竟有没有?也许有着罢,然而我们和别人都没有见。倘使据了见闻,就可以说没有;不但天才,还有使天才得以生长的民众。
天才并不是自生自长在深林荒野里的怪物,是由可以使天才生长的民众产生,长育出来的,所以没有这种民众,就没有天才。有一回拿破仑过Alps山1,说,“我比Alps山还要高!”这何等英伟,然而不要忘记他后面跟着许多兵;倘没有兵,那只有被山那面的敌人捉住或者赶回,他的举动,言语,都离了英雄的界线,要归入疯子一类了。所以我想,在要求天才的产生之前,应该先要求可以使天才生长的民众。——譬如想有乔木,想看好花,一定要有好土;没有土,便没有花木了;所以土实在较花木还重要。花木非有土不可,正同拿破仑非有好兵不可一样。
然而现在社会上的论调和趋势,一面固然要求天才,一面却要他灭亡,连预备的土也想扫尽。举出几样来说:
其一 ...
关于MySQL字符集与比较规则的个人理解
字符集介绍什么是字符集?我们在电脑显示器上看到的数字、标点符号、字母及汉字等符号,在电脑的硬盘里,都是以二进制存储的。电脑显示器上显示的符号,转换成一定格式的二进制,需要根据某种转换规则。
而字符集,就可以理解成这个转换规则。
那这种转换规则要考虑哪些呢?它能把哪些字符转换成二进制,它能把哪些二进制转换成字符,对于不能转换的字符或二进制怎样处理?
例如,ascii字符集用于把英文字母、英文标点符号、数字等符号转换成二进制,如果把汉字用ascii字符集转换成二进制,当又用ascii字符集把二进制转换成字符时,由于用这个字符集不能把二进制转换成汉字字符,只能转换成该字符集限定的字符。最后,由于前后字符不对应,也就是乱码了。
比较规则介绍比较规则,就是比较字符的规则。
显示器上显示的字符,在计算机底层,是以二进制表示的。我们对于显示器上字符的比较,实际上也是对于它们底层的二进制的比较。例如比较字符a与字符A,它们底层的二进制是不一样的,所以它们是不相等的。但在实际生活中,有些应用是不区分大小写的,在它看来,字符a和字符A是相等的。那么,对于这种要求,可以把字符统一转换成大写或小写,再进行比较 ...
堆排序学习笔记
本文是笔者阅读《Introduction to Algorithms》所做的笔记。
堆堆数据结构是一个数组对象,我们可以把它看成一个完全二叉树
表示堆的数组有两个属性,数组的长度和堆的大小(堆内元素的数量)
假设有数组arr=[16, 14, 10, 8, 7, 9, 3, 2, 4, 1]
其表示的堆为:
如果数组arr里的元素是基于1进行索引化的,如果已知堆中某节点的索引i,结合上图,可以推导出它的父节点、左子节点、右子节点的索引。代码如下:
public int parent(int i) {
return i / 2;
}
public int left(int i) {
return i * 2;
}
public int right(int i) {
return i * 2 + 1;
}
如果数组的索引是基于0开始的,则有:
public static int parent(int i) {
return (i + 1) / 2 - 1;
}
public sta ...
ArrayList类部分源代码分析
本文以jdk 11的源代码进行参考。
一些变量/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
/**
* Shared empty array instance used for empty instances.
*/
private static final Object[] EMPTY_ELEMENTDATA = {};
/**
* Shared empty array instance used for default sized empty instances. We
* distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
* first element is added.
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = { ...
关于Java序列化的一些认识
序列化指把java对象变成字节序列,它包含该对象的数据、有关对象的类型信息和存储到对象中数据的类型。ObjectInputStream与ObjectOutputStream分别包含对对象进行反序列化与序列化的方法。
Java实现序列化的方式可以通过实现Serializable接口或Externalizable接口。若实现前者,会自动进行序列化,可以通过添加transient关键字修饰不需要进行序列化的属性;若实现后者,不会自动进行序列化,需要手工制定需要序列化的变量。
问题如果一个可序列化Java对象的一个对象属性不可序列化。当对该对象进行序列化时,其对象属性是否会序列化?初步答案:不可,因为该对象属性不可序列化。
实际:报异常NotSerializableException。如果对不可序列化属性使用triansient关键字修饰,则不会。
Redis 简明使用教程
本文翻译于: https://try.redis.io/
基本介绍Redis在数据库家族中被称为键值对存储。
键值存储的本质是在一个键中能存储一些称为值的数据。我们只有知道存储数据的键,才能够检索出这些数据。
通常,Redis 被称为数据结构服务器,因为它具有外部键值shell,但是每个值都可以包含复杂的数据结构,例如字符串、列表、散列或称为排序集的有序数据结构以及超级日志(hyperloglog)这样的概率数据结构。
作为第一个示例,我们可以使用命令 SET 将值“fido”存储在键“server:name”处:
SET server:name "fido"
Redis 将永久存储我们的数据,因此我们稍后可以问“键server:name 中存储的值是什么?” Redis 会回复“fido”:
GET server:name => "fido"
有一个命令可以测试给定键是否存在:
EXISTS server:name => 1
EXISTS server:blabla => 0
DEL是Redis用 ...