常量:不会变化的数据。不能被修改
-
"hello"、'A'、-10、3.1415926(浮点常量)
-
#define PI 3.1415- 【强调】:没有分号结束标记。
- 【推荐】 定义宏: 定义语法: #define 宏名 宏值
-
const int a = 10;定义语法:const 类型名 变量名 = 变量值。 -
const关键字: 被该关键字修饰的变量,表示为只读变量。
变量:会变化的数据。能被修改
- 定义语法:类型名 变量名 = 变量值。(一般方法)
- 变量三要素:类型名、变量名、变量值。 int r = 3; float s = PIrr;(变量值是一个表达式)
- 变量的定义: int a = 40;
- 变量的声明:
- int a; 没有变量值的变量定义 叫做声明。
- extern int a; 添加了关键字 extern。
声明和定义的区别:
- 变量定义会开辟内存空间。变量声明不会开辟内存空间。
- 变量要想使用必须有定义。
当编译器编译程序时,在变量使用之前,必须要看到变量定义。如果没有看到变量定义,编译器会自动找寻一个变量声明提升成为定义。 如果该变量的声明前有 extern 关键字,无法提升。
建议:定义变量时。尽量不要重名。
标识符:变量和常量的统称
命名规则
- 通常常量使用大写、变量使用小写。大小写严格区分。
- 只能使用字母、数组、下划线()命名标识符。且,数字不能开头。 a-z/A-Z/0-9/
举例
- int a5ir = 10; ok
- int _34F = 6; ok
- float s2_i85c = 5.4; ok
- int 98ti_54 = 4; error.
禁止使用关键字和系统函数作为标识符名称。 main/system/printf/sleep....
sizeof关键字:不是函数
用来求一个变量、类型的大小。
返回一个**无符号整数**。 使用 %u 接收返回值。
使用方法1: sizeof(类型名) -- sizeof(int)
使用方法2: sizeof(变量名) --- int a = 20; sizeof(a)
另一种方式:sizeof 变量名/类型名
- 举例1: sizeof int
- 举例2: sizeof a
有符号整型:
- signed: 有符号 (超级不常用, 通常省略): int a = 10; a = -7;
- int类型: %d 4 字节
int 名 = 值;
- short类型: %hd 2 字节
short 名 = 值; short s1 = 3;
- long类型: %ld 4 字节 (windows: 32/64: 4字节; Linux:32位:4字节, 64位:8字节)
long 名 = 值; long len = 6;
- long long 类型:%lld 8 字节
long long 名= 值; long long llen = 70;
无符号整型:
- unsigned: 无符号 只表示数据量,而没有方向(没有正负)
- unsigned int类型: %u 4 字节
unsigned int 名 = 值;
unsigned int a = 40;
- unsigned short类型: %hu 2 字节
unsigned short 名 = 值;
unsigned short s1 = 3;
- unsigned long类型: %lu 4 字节 (windows: 32/64: 4字节; Linux:32位:4字节, 64位:8字节)
unsigned long 名 = 值;
unsigned long len = 6;
- unsigned long long 类型:%llu 8 字节
unsigned long long 名 = 值;
unsigned long long llen = 70;
char字符类型:1字节
存储一个字符。本质是ASCII码。 'A'、'a'、'%'、'#'、'0'
格式匹配符: %c
- 'A':65
- 'a':97
- '0':48
- '\n':10
- '\0': 0
转义字符:
- '\'
- 将普通字符转为特殊意。
- 将特殊字符转为本身意。
- '\n' 和 '\0'
实型(浮点数、小数):
- float: 单精度浮点型。 4字节
float v1 = 4.345;
%f格式匹配符。 **默认保留 6 位小数**。
- double:双精度浮点型。 8字节 【默认】
double v2 = 5.678;
- unsigned float v1 = 4.345; 无符号的 float 数据
- unsigned double v2 = 5.678; 无符号的 float 数据
- printf("n = **%08.3f**\n", n);
输出的含义为:**显示8位**数(包含小数点), **不足8位用0填**充。并且**保留3位小数**。对第4位做**四舍五入**。
进制和转换:
- 十进制转2进制。 --- 除2反向取余法
- 十进制转8进制。 --- 除8反向取余法
- 十进制转16进制。--- 除16反向取余法
int a = 56; -- 111000
int b = 173; -- 10101101
- 2进制转10进制。
8进制:
- 8进制转10进制。
定义8进制数语法:
056: 零开头,每位数0~7之间。 ---- 46
0124: ---- 84
- 8进制转2进制。
按421码将每个八进制位展开。
056:5--》 101。 6--》 110 。
101110
05326:5 --》 101。 3--》 011。 2--》 010。 6--》 110
- 2进制转8进制:
1 010 111 010 110: 012726
自右向左,每3位一组,按421码转换。高位不足三位补0
16进制:
语法: 以0x开头,每位 取 0-9/A-F/a-f
A -- 10
B -- 11
C -- 12
D -- 13
E -- 14
F -- 15
16 -- 10:
0x1A: 16+10 = 26
0x13F:15+3x16+256
16 -- 2:
0x1A: 00011010
0x13F: 000100111111
2 -- 16:
0001 0011 1111: 13F
自右向左,每4位一组,按8421码转换。高位不足三位补0
总结:
int m = 0x15F4;
int n = 345;
int var = 010011; // 不允许。 不能给变量直接复制 二进制数据。
输出格式:
%d %u %o %x %hd %hu %ld %lu %lld %llu %c %f %lf
%d %u %x %c %s
存储知识:
1 bit位 就是一个 二进制位
一个字节 `1B = 8bit`位。
- 1KB = 1024B
- 1MB = 1024KB
- 1GB = 1024MB
- 1TB = 1024GB
源码反码补码:【了解】
- 源码:
43 -> 00101011
-43 --> 10101011
- 反码:
43 -> 00101011
-43 --> 10101011
- 补码:(**现今计算机采用的存储形式**)
43 -> 00101011 : 正数不变
-43 --> 11010101 : 负数,最高位表符号位, 其余取反+1
- 43-27 ==》 43 + -27
- 人为规定: 10000000 --》 -128
数据类型表示范围
-
char 类型:1字节 8个bit位。 数值位有7个。
-
有符号: -2^7 --- 2^7-1 == -2^(8-1) -- 2(8-1) -1
范围:-128 ~ 127 -
无符号: 0 ~ 2^8 -1
范围:0~255
-
-
short类型:2字节 16bit
-
有符号: -2^15 --- 2^15-1 == -2^(16-1) -- 2(16-1) -1
范围:-32768 ~ 32767 -
无符号: 0 ~ 2^8 -1
范围:0~65535
-
-
int 类型:4字节 -2^(32-1) -- 2^(32-1)-1
-
有符号:
范围:-2147483648 ~ 2147483647 -
无符号: 0
2^32 -14294967295
范围:0
-
-
long类型:4字节
-
有符号:
范围:-2147483648 ~ 2147483647 -
无符号: 0~2^32 -1
范围:0~4294967295
-
-
longlong 类型:8字节
-
有符号:
范围:-2^(63) ~ 2^(63)-1 -
无符号:
范围:0~2^63-1
-