《程序世界》笔记5 整数与浮点小数(上)

数字一切问题的核心原因是:计算机中用二进制来表示整数和浮点小数


整数

计算机整数的特点:

  • 1整数是有范围的:

  • 2数可以进行位运算

  • 3表示负数的方法

1、整数是有范围的:

我们首先来看一个程序:

《程序世界》笔记5 整数与浮点小数(上)

我们看到fact(13)的值比fact(12)的值小,这显然是不对的。因此我们用int来返回值是造成了超出了范围。

关于各种类型的数据的范围如下图:

《程序世界》笔记5 整数与浮点小数(上)

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


分享到:


相關文章: