一、整数在计算机中的表示
在C/C++中,整数一般分为无符号数(unsigned char、unsigned short、unsigned int等)和有符号数(char、short、int、long等),在计算机中通过补码来表示,那么有童鞋会问了,不是有那什么原码、反码之类的吗?为什么不用它们而偏偏用补码呢?
一开始我也有这样的困惑,于是通过各种查,各种看,算是理解了一点点,这里不打算详细解释原码和反码,只举几个例子说明在计算机中为什么不用它们表示十进制数,而用补码来表示。
我们能认识0、1、2、3、、、9等自然数,然而计算机却不认识,计算机“笨”的只认识0和1,所以那些大神们就通过各种手段,将现实世界中的各种信息都转化为一连串由0和1组成的序列。然后计算机就通过不同的解读方式,对这一系列的01串串根据具体的上下文解释成不同的信息。
我们都知道1 + (-1) = 0
,那么如果用原码、反码来表示这个会怎样呢?
原码:
原码 十进制
0000 0001 1
+ 1000 0001 -1
----------------
1000 0010 -2
反码:
反码 十进制
0000 0001 1
+ 1111 1110 -1
----------------
11