目录
知识总结
一、常量
常量:不会变化的数据。不能被修改。
1. “hello”、'A'、-10、3.1415926(浮点常量)
2. #define PI 3.1415 【强调】:没有分号结束标记。 【推荐】 定义宏: 定义语法: #define 宏名 宏值
3. const int a = 10; 定义语法:const 类型名 变量名 = 变量值。
const关键字: 被该关键字修饰的变量,表示为只读变量。
#include <stdio.h>
#define PI 3.1415 // 常量
int main01(void)
{
// 圆的面积 s = PI x 半径的平方
// 圆的周长 l = 2 * PI * r
//int r = 3; // 变量
const int r = 3; // 只读变量
float s = PI * r * r;
float l = 2 * PI * r;
//printf("圆的周长为:%f\n", l); //18.849001
//printf("圆的面积为:%f\n", s); //28.273500
printf("圆的周长为:%.2f\n", l); // 指定小数点后保留2位, 对第3位做,4舍五入
printf("圆的面积为:%.2f\n", s); // 指定小数点后保留2位
return 0;
}
二、变量
变量:会变化的数据。能被修改。
定义语法:类型名 变量名 = 变量值。(一般方法)
变量三要素:类型名、变量名、变量值。 int r = 3; float s = PI*r*r;(变量值是一个表达式)
变量的定义: int a = 40;
变量的声明: 1) int a; 没有变量值的变量定义 叫做声明。
2)extern int a; 添加了关键字 extern。
1. 变量定义会开辟内存空间。变量声明不会开辟内存空间。
2. 变量要想使用必须有定义。
当编译器编译程序时,在变量使用之前,必须要看到变量定义。如果没有看到变量定义,编译器会自动找寻一个变量声明提升成为定义。
如果该变量的声明前有 extern 关键字,无法提升。
【建议】:定义变量时。尽量不要重名。
标识符:
变量和常量的统称。
命名规则:
1. 通常常量使用大写、变量使用小写。大小写严格区分。
2. 只能使用字母、数组、下划线(_)命名标识符。且,数字不能开头。 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.
3. 禁止使用关键字和系统函数作为标识符名称。 main/system/printf/sleep....
sizeof关键字:
不是函数。用来求一个变量、类型的大小。 返回一个 无符号整数。 使用 %u 接收返回值。
方法1: sizeof(类型名) -- sizeof(int)
方法2: sizeof(变量名) --- int a = 20; sizeof(a)
【了解】: sizeof 变量名/类型名 举例1: sizeof int
举例2: sizeof a
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 1024 // 定义常量
int main0301(void)
{
int a = 10; // 定义变量: 三要素
short b = 20;
long c = 30;
long long d = 40;
printf("================a===%d\n", sizeof(a));
printf("================b===%d\n", sizeof(b));
printf("================c===%d\n", sizeof(c));
printf("================d===%d\n", sizeof(d));
printf("int 大小为:%d\n", sizeof(int));
printf("short 大小为:%d\n", sizeof(short));
printf("long 大小为:%d\n", sizeof(long));
printf("long long 大小为:%d\n", sizeof(long long));
system("pause");
return EXIT_SUCCESS;
}
int main0302(void)
{
int a = 3;
short b = 4;
long c = 5; // 5L 5l
long long d = 6; // 5LL 5ll
printf("sizeof(int) = %d\n", sizeof(int));
printf("sizeof(short) = %d\n", sizeof(short));
printf("sizeof(long) = %d\n", sizeof(long));
printf("sizeof(long long) = %d\n", sizeof(long long));
printf("--------------------------------------\n");
unsigned int aun = 3; // 3u
unsigned short bun = 4; // 3u
unsigned long cun = 5; // 3lu
unsigned long long dun = 6; // 3llu
printf("sizeof(unsigned int) = %d\n", sizeof(unsigned int)); // aun
printf("sizeof(unsigned short) = %d\n", sizeof(unsigned short));
printf("sizeof(unsigned long) = %d\n", sizeof(unsigned long));
printf("sizeof(unsigned long long) = %d\n", sizeof(unsigned long long));
}
三、有符号整型
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;
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main0401(void)
{
size_t var = 10;
printf("var = %u\n", var);
unsigned int a = 10u; // 简写成 unsigned int a = 10;
unsigned short b = 20u;// 简写成 unsigned short b = 20;
unsigned long c = 30Lu;
unsigned long long d = 40LLu;
printf("unsigned int 型数据值:%u\n", a);
printf("unsigned short 型数据值:%hu\n", b);
printf("unsigned long 型数据值:%lu\n", c);
printf("unsigned long long 型数据值:%llu\n", d);
system("pause");
return EXIT_SUCCESS;
}
五、char字符类型
存储一个字符。本质是ASCII码。 ‘A’、‘a’、‘%’、‘#’、‘0’
格式匹配符: %c
‘A’:65
‘a’:97
‘0’:48
‘\n’:10
‘\0’: 0
转义字符:
‘\’ 将普通字符转为 特殊意。 将特殊字符转为本身意。
'\n' 和 ‘\0’
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main0501(void)
{
char ch = 'A'; // 65
//printf("1 ch = %c\n", ch);
printf("1 ch = %d\n", ch);
ch = 'm'; //
//printf("2 ch = %c\n", ch);
printf("2 ch = %d\n", ch);
//ch = 97;
ch = 'a'; // 97
//printf("3 ch = %c\n", ch);
printf("3 ch = %d\n", ch);
system("pause");
return EXIT_SUCCESS;
}
// A -- 65 a -- 97
int main0502(void)
{
char ch = 'M';
char var = '5';
printf("ch = %c\n", ch + 32);
printf("var = %c\n", var+4);
printf("'\\n\'х─ох╬ф=%d\n", '\n');
system("pause");
return EXIT_SUCCESS;
}
六、实型(浮点数、小数)
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位做四舍五入。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main0601(void)
{
float m = 3.145;
double n = 4.566545;
printf("m = %08.2f\n", m);
printf("n = %08.3lf\n", n);
system("pause");
return EXIT_SUCCESS;
}
七、进制和转换
十进制转2进制。 --- 除2反向取余法。 【重点】
十进制转8进制。 --- 除8反向取余法。
十进制转16进制。--- 除16反向取余法。
int a = 56; -- 111000
int b = 173; -- 10101101
2进制转10进制。
2^10 = 1024
2^9 = 512
2^8 = 256
2^7 = 128
2^6 = 64
2^5 = 32
2^4 = 16
2^3 = 8
2^2 = 4
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int main0701(void)
{
int a = 0x2C; // 等价 0x2c
printf("10进制显示 a = %d\n", a);
printf("8进制显示 a = %o\n", a);
printf("16进制显示 a = %x\n", a);
system("pause");
return EXIT_SUCCESS;
}
八、写在最后
对于热爱编程的同学来说,大部分人刚开始只是知其然却不知其所以然,这是一个普遍现象。主要原因是随着工作时间增加,虽然大部分人都是每天上班下班忙忙碌碌,但仅有少数人才真的下功夫去研究自己做的编程工作,更不愿意去学习、思考。知识只有建立起关联并形成体系的时候,才能真正提升你的能力,帮助你用来分析和解决问题。请微信联系:ossce666 如何搭建一套自己的知识体系,将沉淀的知识变现,也可以关注:知识变现系统搭建。