数字一切问题的核心原因是:计算机中用二进制来表示整数和浮点小数
整数
计算机整数的特点:
1整数是有范围的:
2数可以进行位运算
3表示负数的方法
1、整数是有范围的:
我们首先来看一个程序:
我们看到fact(13)的值比fact(12)的值小,这显然是不对的。因此我们用int来返回值是造成了超出了范围。
关于各种类型的数据的范围如下图:
2038年危机?
实际上整数范围的问题,是连专家也可能会出错的难题。
比如,在Linux等UNIX系列操作系统中,时刻是以从Epoch到现在为止的秒数来表示的,Epoch是一个特定的时间(世界协调时间1970年1月1日凌晨0时0分),但存放这个秒数的是32位整数,所以到2038年1月19日11时14分7秒(北京时间),32位带符号整数所能表示的最大整数就到头了。如果像现在这样,2038年以后的时刻就不能表示了。30年后会像2000年问题那样引起喧嚣吗?
2、数可以进行位运算
c语言,ruby语言和python语言等都可以进行位运算,他们的位运算符都是类似的。
&位逻辑与
| 位逻辑或
^位逻辑异或
~位逻辑反
>> 右移
<< 左移
3、表示负数的方法
负数用补码的方式表示,二进制的补码就是反码+1。
这里面包括两个问题:
A已知负数,我们拿-2举例,求其二进制表示。
解:
找到该负数的绝对值2;
将绝对值表示为二进制数:00000010
求得该二进制数的反码:11111101
将反码+1得到:11111110
B已知二进制数,比如11110010,求其负数的十进制。
解:
求得该二进制数的反码:00001101
将反码+1得到:00001110
算出十进制数:2+4+8=14
得到负数:-14
閱讀更多 黑客小學生藍薩節 的文章