目录
前言
本文主要讲述C语言当中的基本数据类型,以及涉及到的常量,变量的相关知识
1、计算机当中的数据存储
在计算机当中,以二进制的方式存储数据,以1或者是0来存储
计算机中存储 1 或 0 用 位表示---bit(比特),一个bit中只能存储一个1或者一个0 , b表示
存储大小如下:
1byte = 8bit
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
2、进制转换
由于计算机当中存储数据用二进制来存储数据,所以必定会涉及到进制的转换。
一个数值有多种表示类型:二进制,八进制,十进制,十六进制
存储数据:以二进制形式存储数据
二进制:逢二进一,一个位置只能显示0/1超过1就向高位进1
比如要表示2 : ======> 0b10 二进制数表示以 0b开头
十进制:逢十进一,一个位置只能出现0、1、2、3、4、5、6、7、8、9,超过则进位
如果要显示10====>1 0
八进制:逢八进一,一个位置只能显示0、1、2、3、4、5、6、7
如果要显示8 ======>0 10 八进制数表示 以 0开头
十六进制:逢十六进一,一个位置只能显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F (0~15)
如果要显示16 ======>0x 10 十六进制以0x开头
1、十进制和二进制的转换
十进制转换二进制 :对十进制数循环除以2取余,直到结果等于0,倒叙取余数得到二进制
二进制转换十进制:对二进制数每一位都进行 数据 * 2^i i表示在二进制数中的位置(低位从0开始),进行相加
2、十进制和八进制转换
十进制转换八进制:十进制数循环除以8取余,直到商为 0 为止,逆序读取余数
八进制转换十进制:数据 * 8^i i位置,相加
3、十进制和十六进制转换
十进制转换十六进制:把十进制数循环除以十六,直到商为0,倒叙取余数
十六进制转换十进制:数据 * 16^i i位置,相加
3、数据类型
1、基本数据类型:
整数类型 可以表示一个整数
浮点数类型 可以表示一个小数
字符类型 可以表示一个ASCCI 字符
字符串 多个字符按顺序排列
2、构造数据类型
在基础数据类型上,有些信息表示不完全,通过基础的数据类型复合构成新的类型
结构体类型 ;联合体/共用体类型 ;枚举类型; 指针类型 ;数组类型;
3、常量
常量:不能被改变的值,固定的、确定的值
- 整型常量:整数
1 、 2 、 -1 、 120 以具体的数值表示
- 浮点类型常量:小数
3.14 、 1.234 、 -3.25
- 字符类型常量:英文字符
'a' 、 '1' 、 ' '(空格字符) 、 ',' 、 '\n'(换行字符)
错误表示: 'ab' 、 ''
字符通过单引号括起来的一个英文字符
在C语言中 字符类型其实就是一种特殊的整数,通过一个特定的表来表示 字符与整数的对应关系
如果要存储一个字符,根据表找到字符的对应关系,就存储对应的整数
对于C语言使用的表:ascii码 表 终端输入:
man ascii
'0' - '9' :48 - 57
'A' - 'Z':65 - 90
'a' - 'z':97 - 122
'\n' : ' ': 10 - 32
字符 可以当作整数来进行使用运算 字符个数比较少,
在ascii码表中每个字符对应一个整数,最大的整数也比较小,存储字符占用的位数也会比较少
- 字符串常量:多个字符按顺序排列
"abc" 、 "123" 、 "1" 、 "" 主要用双引号括起来的,就是字符串
4、变量
在程序中可以随时改变的值,就叫做变量
使用变量必须通过符号来表示
在使用符号表示变量时,需要对变量符号进行说明,代表在使用变量符号哪种类型的数据,需要有一个对应的变量类型
-
整数类型
int 整型 占用4个字节,32位 short int / short 短整型 占用2个字节,16位 long int / long 长整型 32位操作系统:占用4个字节,64位操作系统:占用8个字节 long long int / long long 占用8个字节
-
浮点数类型
float 单精度浮点类型 占用4个字节 double 双精度浮点类型 占用8个字节
-
字符类型
char 字符类型 占1个字节
字符类型就是一个特殊的整型,一般整型占多个字节,字符类型占一个字节
1、 变量的定义
1、变量的定义格式
格式:
数据类型 变量名; #用变量名定义一个 数据类型的 变量
数据类型 变量名1 , 变量名2 .....;
在定义时,不能只写 数据类型,必须跟上符号标记(变量名),通过符号标记来表示数据
2、标识符命名规则
- 由字母、数字、下划线( _ )组成
- 只能由字母或下划线开始,不能以数字开头(int 1_a 错误)
- 严格区分大小写(int a 和 int A 是两个变量)
- 不能与关键字重名(在C语言中,作为特定操作的单词符号,有特殊含义,用户定义的名字不能冲突)
- 一般变量命名要让别人一眼能看出表示的意思,比如定义一个变量number,别人能看出表示数字的意思
2、变量的赋值与初始化
当变量申请时,其中存储的值是随机值,在使用变量之前,就需要对变量存储一个值
赋值操作:
初始化:申请(定义)变量的同时,进行赋值操作(赋初始值)
赋初值:先申请变量,之后的第一次赋值
注意:两种操作有不同的意思,要区分开,因为两个操作有先后顺序,不能混为一谈。
注意:使用 = 赋值符号 左右两边的类型必须一一匹配
3、变量的取值范围
在讲述变量的取值范围之前,要清楚计算机存储的数据是以二进制来存储数据类型,
在有符号数据中,最高位用来表示符号位,用0 表示正数,用1 表示负数
在计算机存储数据时,采用二进制补码方式存储数据
原码:
直接把数值用二进制方式表示就叫做原码
1 = 0 000 0001 正数原码
-1 = 1 000 0001 负数原码
反码:
正数的反码等于原码,负数的反码:符号位不变,其余所有位都取反(1变为0,0变为1)
1 = 0 000 0001 正数原码
-1 = 1 000 0001 负数原码
1 = 0 000 0001 正数反码 == 原码
-1 = 1 111 1110 负数反码
补码:
数据在计算机中的存储方式,正数的补码等于原码,负数的补码:反码+1
1 = 0 000 0001 正数反码 == 原码
-1 = 1 111 1110 负数反码
1 = 0 000 0001 正数补码
-1 = 1 111 1111 负数补码 (-1 在计算机中的真正的存储形式)
并且在进行数据取值范围时,有有符号和无符号之分:
signed 修饰数据类型 , 表示数据是有符号的类型
有正负之分,变量中就可以存储正数,也可以存储负数,在数据类型大小中需要存储符号
默认情况,定义的变量都是有符号的,相当于 signed可以省略
int a = 10;
int b = -10;
signed int c = -2; ====等价于 int c = -2;
unsigned 修饰数据类型 , 表示数据是无符号的
只能存储正数,无法存储负数,在数据类型大小中不需要额外存储符号
unsigned int c = 10;//定义一个无符号整数 存储 10
unsigned int d = -1;//转换为 非常大 正数
1、 char类型(1个字节)取值范围
unsigned char
signed char
2、int类型取值范围
关键字 | 类型 | 占用字节数 | 取值范围 |
short int | 短整型 | 2 | -32768~32767(-2^15~2^15-1) |
int | 整型 | 4 | -2147483648~2147483647(-2^31~2^31-1) |
long int | 长整型 | 4 | -2147483648~2147483647(-2^31~2^31-1) |
unsigned short | 无符号短整型 | 2 | 0~65535(0~2^16-1) |
unsigned int | 无符号整型 | 4 | 0~4294967295(0~2^32-1) |
unsigned long | 无符号长整型 | 4 | 0~4294967295(0~2^32-1) |
3、浮点类型取值范围
浮点数在内存中以二进制形式存储,分为 符号位 阶码与尾数三部分
浮点数的二进制表示:
整数部分按照除以2取余数,小数部分乘以2取整数
规定整数部分必须为1,进行转换指数
如:5.25 == 101.01 == 1.0101 * 2^2
存入 计算机:
阶码:2^2 ===> 2 + 127 = 129 存储
尾数:1.0101 去除整数1 0101 存储
在float:符号位1位,阶码8位,尾数23位
阶码8位,表示范围 0 ~ 255即 2^0 ~ 2^255次方,但是由于 在float类型中指数表示有负数,所以 取中间数127作为指数E的 0 值(即2^0),如果是负数阶码 127+(-x)(如:2^-3,则 127 - 3 = 124)存入阶码;如果是正数阶码 127+(x)存入阶码,来表示,之后使用会自动 - 127之后作为阶码
float类型的精度:小数点后6位
在double:符号位1位,阶码11位,尾数52位
double类型的精度:小数点后15位
举例说明:
-10.25
总结
本文主要介绍了C语言中的数据类型,变量的表示,常量的表示,以及各种变量的取值范围。