C语言| 基本数据总结
1.位、字节和字
位、字节和字是描述计算机数据数据单元或存储单元的术语
- 位(bit):最小的储存单元,可以存储0或1,是计算机内存的基本改造块
- 字节(byte):常用的计算机的存储单位。一般来说,1字节均为8位(1 byte = 8 bit)。又因为1位可以表示0或1,那么8位字节就有256种可能的0、1组合,那通过二进制编码,便可以表示0~255的整数或一组字符。
- 字(word):设计计算机时给定的自然储存单位,也是计算机一次处理数据的最大单位。字由若干个字节组成,而字的位数叫做字长,即CPU一次处理二进制代码的位数。字的长度与计算架构有关,比如32位机,一个字就是32位,换算成字节就是4字节;同样的64位机,一个字就是64位,也就是8字节。 下面的数据都是以字节为单位
2.整型类型
image.png
2.1 数据类型长度和取值范围
类型 | win32 | win64 | linux32 | linux64 | 取值范围 |
short | 2 | 2 | 2 | 2 | -27 ~ 27-1 |
unsigned short | 2 | 2 | 2 | 2 | 0 ~ 216 -1 |
int | 4 | 4 | 4 | 4 | -215 ~ 215-1 |
unsigned int | 4 | 4 | 4 | 4 | 0 ~ 232 -1 |
long | 4 | 4 | 4 | 8 | -231 ~ 231-1 |
unsigned long | 4 | 4 | 4 | 4 | 0 ~ 232 -1 |
long long | 8 | 8 | 8 | 8 | -231 ~ 231-1 |
unsigned long long | 8 | 8 | 8 | 8 | 0 ~ 264 -1 |
这其中要特别注意long类型,win系统的数据长度都为4字节,而Linux64中数据长度为8字节,二者不统一,所以编写跨平台的软件时尽量不要使用long类型,或者需要对long类型做特殊处理。
2.2.1 关键字signed和unsigned
- signed 是一般是被默认省略(不用特意表示出来),表示数据是有符号的,即表示可以储存负整数和正整数。
- unsigned:需要特意表示出来 ,表示数据是没有符号的,即不能表示正负,所以一般认为其表示的是正整数
区别:signed需要用一个字节来储存符号,进而同类型下的signed能存储的数值的绝对值的大小小于unsigned。
2.2.2 short、int、long和long long
short:有符号短整型,是signed short int的省略写法,一般至少占用2个字节,存储大小不能大于int类型,可以节省一定内存,一般多用于单片机和嵌入式系统。其无符号是unsigned short。
int:有符号整型,必须为整数,即正整数、负整数和零。在ISO C规定其取值范围最小为-32768~32767,而一般来说,系统会用一个特殊位的值表示有符号整数的正负号。其无符号为unsigned int。
long:有符号长整型,是signed long int的省略写法,取值范围大于int类型。如果要将较小的常量作为long类型来对待,可以在值的末尾加上l(小写的L)或者L后缀,一般用L。其无符号为unsigned long。
long long:有符号长长整型,是signed long long int的省略写法,和long类似,需要在值后加ll或LL ,其无符号为unsigned long long
3.字符类型
image.png
类型 | Win | Linux | 取值范围 |
char | 1 | 1 | -128~127 |
unsigned char | 1 | 1 | 0~255 |
char类型用于存储字符,但从技术层面看,char是整数类型,因为char类型实际存储的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的字符(一般为ASCII编码),其无符号为unsigned char。
4.布尔类型
**__Bool**:C99标准新增,用于表示布尔值,即逻辑值true和false。在C中,1代表true,值0 表示false,所以和char类型一样也可以认为是一种整数类型,一般占用1位的存储空间。
5.浮点类型
### 5.1 浮点数简述
浮点数:其小数点的位置是可以是漂浮不定,即在一个值后面加上一个小数点,该值就成为了一个浮点数(如7是整数,而7.00是浮点数),书写浮点数有很多形式,这里简要介绍e记数法
在十进制下,上图中3.141592用e记数法为0.311592E1,1为指数,E(表示10)为底数。(注:浮点型常数不能在中间加空格) 计算机把浮点数分成小数部分和指数部分来表示,而且分开储存这两部分,所以7.00和7在数值上相同,但在计算机中二者的储存方式不同。
5.2 float、double和long double
类型 | 所占大小 | 指数位数(bits) | 取值范围 | 精度 |
flot | 4 | 8 | -2128~+2128 | 6~7 |
double | 8 | 11 | -21024~+21024 | 15~16 |
long double | 16 | 18~19 |
### 5.3 浮点值的上溢和下溢 |
上溢:在计算中,数值超过当前类型的最大范围时,会发生上溢,即给变量赋一个无穷大的特定值,printf()显示inf |
```c #include<stdio.h> #include <math.h> |
int main() { float a = pow(2,127); float b = pow(2,129); printf(“%e”, a); printf(“%e”, b); return 0; } 输出结果c 1.701412e+38 inf |
``` |
下溢:在计算过程中,损失了原来末尾的有效数字的情况。如将一个五位有效数字的数0.31415E-10除以10,所得到的结果是0.03141E-10 |
6.复数和虚数
C99新增,一般了解即可
请先 后发表评论~