目录
一、数据类型
1.基本类型
2.sizeof运算符
3.signed和unsigned
二、取值范围
1.比特位
2.字节
3.符号位
4.补码
5.基本数据类型的取值范围
一、数据类型
1.基本类型
(1)整数类型
- short int
- int
- long int
- long long int
(2)浮点数类型
- float
- double
- long double
(3)字符类型
- char
(4)布尔类型
- _Bool
(5)枚举类型
- enum
2.sizeof运算符
sizeof 运算符用于获得数据类型或表达式的长度
如:-sizeof(object);//sizeof(对象)
-sizeof(type_name); //sizeof(类型)
-sizeof object; //sizeof 对象
代码举例:
#include int main(){int i;char j;float k;i = 123;j = 'C';k = 3.14;printf("size of int is %d\n",sizeof(int));printf("size of i is %d\n",sizeof(i));printf("size of char is %d\n",sizeof(char));printf("size of j is %d\n",sizeof j);printf("size of float is %d\n",sizeof(float));printf("size of k is %d\n",sizeof k);return 0;}
代码运行结果:
分别打印各类型所占字节:
#include int main(){printf("int = %d\n",sizeof(int));printf("short int = %d\n",sizeof(short));printf("long int = %d\n",sizeof(long));printf("long long int = %d\n",sizeof(long long));printf("char = %d\n",sizeof(char));printf("_Bool = %d\n",sizeof(_Bool));printf("float = %d\n",sizeof(float));printf("double = %d\n",sizeof(double));printf("long double = %d\n",sizeof(long double));return 0;}
运行结果(设备不同,结果可能也不同):
3.signed和unsigned
signed:代表有符号的,第一个位代表正负,剩余的代表大小,例如:signed int 大小区间为-128-127。(默认为signed)
unsigned:代表无符号的,所有的位都为大小,没有负数,例如:unsigned int 大小区间为:0-255。
- [signed] short [int]
- unsigned short [int]
- [signed] int
- unsigned int
- [signed] long [int]
- unsigned long [int]
- [signed] long long [int]
- unsigned long long [int]
代码举例:
#include int main(){short i;unsigned short j;i = -1;j = -1;printf("%d\n",i);//d为打印带符号的 printf("%u\n",j);//u为打印不带符号的 return 0;}
运行结果:
可见,打印 j 时,结果并不是我们期望出现的-1,而是65535,这与数据类型的取值范围有关。
二、基本数据类型的取值范围
1.比特位
CPU能读懂的最小单位是:比特位,bit,b。每个比特位只能存放二进制数,即0和1.
2.字节
内存机构最小寻址单位:字节,Byte,B
注:1Byte = 8 bit
一个字节能存放的最大的数()用二进制表示为:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
该数转化为十进制为:2147483647
补充:进制
打印,代码如下:
# include #include int main(){unsigned int result = pow(2,32) - 1;printf("result = %u\n",result);return 0;}
运行结果:
注意:若不加“unsigned”,则输出结果为2147483647.这是因为默认情况下int是signed类型的,也就是说左边第一位是符号位,所以必须加“unsigned”来使其变为一个无符号的整型变量,使得32位都用来存放数值。
3.符号位
- 存放signed类型的存储单元中,左边第一位表示符号位。如果该位为0,表示该整数是一个正数;如果该位为1,表示该整数是一个负数。
- 一个32位的整型变量,除去左边第一位符号位,剩下表示值的只有31个比特位。
4.补码
- 正数的补码是该数的二进制形式。
- 负数的补码需要通过以下几步获得:
(1)先取得该数的绝对值的二进制形式
(2)再将第1步的值按位取反(除符号位)
(3)最后将第2步的值加1
例如:
5.基本数据类型的取值范围
数据类型 | 字节数 | 取值范围 |
char | 1 | -128~127 |
unsigned char2 | 1 | 0~255 |
short | 2 | -32768~32767 |
unsigned short | 2 | 0~65535 |
int | 4 | -2147483648~2147483647 |
unsigned int | 4 | 0~4294967295 |
long | 4 | -2147483648~2147483647 |
unsigned long | 4 | 0~4294967295 |
long long | 8 | -9223372036854775808~9223372036854775807 |
unsigned long long | 8 | 0~18446744073709551615 |
数据类型 | 字节数 | 取值范围(绝对值) |
float | 4 | 1.17549*10^-38~3.40282*10^38 |
double | 8 | 2.22507*10^-308~1.79769*10^308 |
long double | 12 | 2.22507*10^-308~1.79769*10^308 |