目录
1.常量和变量
1.1常量
在程序运行过程中,其值不能被改变的量。
1.2 变量
在程序运行过程中,其值能被改变的量。
2.整型常量(3种)
123 ---十进制的整型常量
0x123 ---十六进制的整数常量
0123 ---八进制的整数常量
进制:逢几进一
2.1整型常量进制间的转换
2.1.1 十进制==>二进制
方法:除二取余法(辗转相除法)
eg:106(0110 1010)
106
|53 ---0 (低位)
|26 ---1
|13 ---0
|6 ---1
|3 ---0
|1 ---1
|0 ---1 (高位)
2.1.2 二进制 ==>十进制
方法:加权求和
eg:1010
2^3+2^1 = 10
2.1.3 二进制 <==>八进制
对应关系:1位八进制数对应3位二进制数
eg:001 111 011
1 7 3
2.1.4 二进制 <==>十六进制
对应关系:1位十六进制数对应4位二进制数
eg:0111 1011
7 b
3.整型变量
3.1 定义变量
3.1.1语法
数据类型 变量名;
int a;
3.1.2 整型数据类型(八种)
有符号和无符号
int <=> signed int
short
long
long long
3.1.2.1 数据类型的大小
sizeof(运算数):计算运算数所代表的数据类型占用的内存空间的字节数。
注:运算数可以是一个类型名,变量名及常量或者表达式
#include<stdio.h>
int main(void)
{
printf("sizeof(int) = %ld\n",sizeof(int));
printf("sizeof(short) = %ld\n",sizeof(short));
printf("sizeof(long) = %ld\n",sizeof(long));
printf("sizeof(long long) = %ld\n",sizeof(long long));
return 0;
}
运行结果:
int 4字节
short 2字节
long 8字节
long long 8字节
3.1.3 变量名
(1)由数字、字母、下划线组成
(2)不能以数字开头
(3)不能与关键字重名
(4)不要与预处理命令及库函数重名
附:32个关键字
3.2 变量给值
int a = 10; // 定义时给值 初始化
int a;
a = 10; //赋值
变量实际上对应的是一块可以被修改的空间。
4.整数数据存储
以小端存储:高高低低 ---- 高位数据存在高地址处,地位数据存在低地址处
int a = 123; // 00 00 00 7b
整数类型数据计算机最终以补码形式存储。
正数:原码,反码,补码都是一样的。
负数:补码 = 反码+1
无符号数:所有的二进制位都是数值位;
有符号数:最高位充当符号位,其余都是数值位。(0表示正数,1表示负数)
例:以int型为例
eg : -6735
原码:1000 0000 0000 0000 0001 1010 0100 1111
反码:1111 1111 1111 1111 1110 0101 1011 0000 (符号位不变,数值位按位取反)
补码:1111 1111 1111 1111 1110 0101 1011 0001 (反码 + 1)
测试代码:
#include<stdio.h>
int main(void)
{
int a = -6735;
printf("a = %#x\n",a);
return 0;
}
测试结果:
unsigned char a = 65535;
a [ 1111 1111 1111 1111 ]
|
%hd //d 表示以有符号十进制形式来打印
|
1|111 1111 1111 1111
|
最高位是1 表示 这个值 一定是 某个负数 的补码值
最终打印的一定是原码值
1|111 1111 1111 1111
1|000 0000 0000 0001 // -1
#include<stdio.h>
int main(void)
{
unsigned char a = 65535;
printf("a = %hd\n",a);
return 0;
}
运行结果:
附:打印格式
%d ----- 以有符号十进制整数形式打印
%hd ----- 打印有符号十进制整数占2字节
%#x ----- 以十六进制整数形式打印
%u ----- 以无符号十进制整数形式打印
5.考点
5.1 整数溢出
eg:short 类型数据大小为2字节 16位
65535 (1111 1111 1111 1111)再加上1就会溢出
成为:1 0000 0000 0000 0000
结果就是 0;
#include<stdio.h>
int main(void)
{
unsigned short a = 65535;
a = a+1;
printf("a = %hd\n",a);
return 0;
}
运行结果:
5.2 整数存储和使用分开的
unsigned short a = 65535; //1111 1111 1111 1111
unsigned short b = -65535; // 先不管前面数据类型,将-65535的最高位看作符号位,其余位看作数值位,按位取反,+1,得到-1,这就是b的原码。
6.浮点型
6.1 浮点型 常量形式
1.23
1.23e-4 ----科学计数法形式 1.23 * 10^-4
1.23E-4
6.2 浮点型变量
6.2.1 关键字
float ----- 单精度(4字节)
double ----- 双精度(8字节)
long double ----- (16字节)
6.2.2 定义变量
关键字 变量名;
float f;
6.2.3 浮点数的存储
(1)首先将十进制形式的小数,写成二进制形式小数
整数:除二取余法
小数:乘二取整法
eg :12.125
12 --- 1100
0.125 *2 = 0.25 --- 0
0.25*2 = 0.5 --- 0
0.5 * 2 = 1 --- 1
1100.001
(2)将二进制形式的小数写成科学计数法形式
1.100001 * 2 ^ 3
(3)按照IEEE754标准存放
float :(4字节 32位)
1位 | 8位 充当 指数位 | 23位
符号位 | 指数位 +127(偏移量 ) | 尾数位
0 | 10000010 | 100001
尾数位不足23位,后加0补全。
0100 0001 0100 0010 0000 0000 0000 0000
4 1 4 2 0 0 0 0
double:
1位 | 11位 充当 指数位 | 52位
6.2.4 浮点数的比较
保证精度一致、类型一致
浮点型常量默认被认做double类型。
0.9f ---- 表示指定为float类型
注:整型常量默认识别为 int 类型
eg:
#include<stdio.h>
int main(void)
{
float f = 0.9;
if(f == 0.9)
printf("yes\n");
else
printf("no\n");
return 0;
}
运行结果:
7.字符型
'a' ----编码(ASCII码)----0101010-----计算机中保存的实际上是这个符号对应的ASCII的编码值
7.1 常用的ASCII码
0~32 控制字符(不可见字符)
48~57 数字字符 '0' ~ '9'
65~90 英文的26个大写 字母的符号
97~122 英文的26个小写 字母的符号
7.2 字符型变量
char ch; ---- 占一个字节
语法:
char ch = 'a';
char 也是一种整型类型,char和整型之间是通用的。
7.3 应用
英文字母大小写的转换(+- 32)
数值和字符间的转换
eg:请编译程序将“China ”译成密码,用原来字母后面的第4个字母代替原来的字母。
#include<stdio.h>
int main(void)
{
char c1 = 'C';
char c2 = 'h';
char c3 = 'i';
char c4 = 'n';
char c5 = 'a';
printf("%c%c%c%c%c\n",c1+4,c2+4,c3+4,c4+4,c5+4);
return 0;
}
运行结果: