我爱学习网 52xx.cn我爱学习网菜单按钮
  • 搜索

为什么程序员会把万圣节当作圣诞节?

我们都知道10月31日是万圣节前夜。可是,如果有人在那一天庆祝圣诞节(你没看错,不是12月25日),那他一定是个程序员,理由是程序员们可以认为:Oct 31=Dec 25(Oct是英文10月的缩写,Dec是12月的缩写)。你一定惊讶极了,程序员居然会认为10月31日等于12月25日,难道他们可以穿越时间?

其实这里的Oct是指八进制,Dec是指十进制。也就是八进制的31等于十进制的25。这种情况下,O31=3×8+1=D25是成立的。

原来如此。可是,为什么程序员要用八进制,还有十六进制呢?有什么数是十进制不能表示的?

计算机内部使用二进制计数,因为二进制只有0和1两个符号,对应于晶体管的“开”和“关”两种状态。但对于人来说,二进制的表述过于冗长,难以辨识和记忆。举例来说,十进制计数系统中的4660,用二进制表示就是1001000110100;二进制状态下的1011000110100,用十进制表示就是5684。所以,为了便于处理这些数字,程序员需要一种进制,既容易辨识又能够方便地和二进制进行转换,这就是八进制和十六进制了。因为8和16是2的幂(8是2的三次方,16是2的四次方),所以每个八进制数位刚好对应于3个二进制数位,每个十六进制数位刚好对应于4个二进制数位。例如,二进制100的八进制表示是4,二进制110的八进制表示是6。因此,二进制110100的八进制表示就是64。同理,二进制0100的十六进制表示是4,二进制0011的十六进制表示是3,二进制110100的十六进制(注意前面补0)是34。而十进制和二进制的转换则没有那么直接和方便。

除此之外,二进制数中如果有一位数改变,那么它的十进制数往往很多位都会变化。而对应的八进制和十六进制则只有相应的数位发生改变。对于程序员来说,这个特性是尤为重要的。编程实践中,我们常常需要用位掩码(即一个二进制数字)来表示一个状态,并且通过设置或清空某个二进制位来改变状态。在这些情形中,使用八进制和十六进制比十进制更为直观和方便。当然,在其他一些场合程序员也使用十进制。

在现实生活中,程序员当然不会把万圣节当做圣诞节了,之所以他们认为Oct 31=Dec 25,是因为他们是一群每天与计算机“说话”的人。