1 数据类型简介
在编写程序中,数据类型(data type)定义了使用存储空间的方式。通过定义数据类型,告诉编译器怎样创建一片特定的存储空间,以及怎样去操作这片存储空间。
C/C++中有四个基本的内置数据类型。char是用于存储字符的;int存储整数值;float和double存储浮点数值,其中float用于单精度浮点数,而double用于双精度浮点数。
2 说明符
说明符(specifier)用于改变在“1 数据类型简介”中介绍的4种基本内置数据类型的含义,并把它们扩展成一个更大的集合。有4个说明符:long、short、signed和unsigned。
2.1 long和short
long和short修改数据类型所占内存空间的大小。如short int ,int 和long int,其中short int占2个字节,int和long int为4个字节。
2.2 signed和unsigned
signed和unsigned说明符告诉编辑器怎样使用整数类型。unsigned数不保存符号,而signed是默认的,需要将数值的第一位作为符号位,0为正数,1为负数。
3 signed int的表示方式
3.1 正数的表示方式
在“2.2 signed和unsigned”中提到,signed说明符是默认的,即
short a = 1;
此时,a
的类型是
signed short int
,其大小为
2
个字节,存储方式为
0000 0000 0000 0001
;其中第一位
0
表示该值为正数。
3.2 负数的表示方式
short b = -1;
此时需要使用“补码”的方式进行存储。一个数的补码即为该数的反码加
1
,而反码指的是对数值的每一位求反(
0
的反码是
1
,
1
的反码是
0
),例如
1111 0001
的反码是
0000 1110
。所以,对于
-1
来说,首先将其变为带符号位的二进制值
1000 0000 0000 0001
,接下来求该值的反码,需要注意的是在求反码时,符号位即第一位不需要改变,那么得到的结果是
1111 1111 1111 1110
,最后对该值加
1
得到
-1
的补码为
1111 1111 1111 1111
,即
b
的值是
0xFFFF
。
4 signed short int的取值范围
signed short int的最大值为正数的0111 1111 1111 1111,转换为十进制的值是32767,而-32767对应的值是1000 0000 0000 0001,那么比该值更小的值应该是1000 0000 0000 0000,但是没有负数对应的补码是1000 0000 0000 0000;因此人为规定-32768的值是1000 0000 0000 0000。所以signed short int的取值范围应该是-32768~32767。