第一课1.5
文章目录
前言
记录1.5学习内容及心得,涉及内容:进制转化、编译链接过程 、数据类型及大小、变量、常量、标识符
一、进制转化
规则:
按权求和
示例:(100101)2 = (1x25 +1x22 + 1x20 = 37)10
(311) 8 = (3x82 + 1x81 +1x80 = 201)10
(C01)16 =(12x162 + 1x160 = 3073)10
(103)10 =>(1100111)2 => (147)8 =>(67)16
103=64+32+4+2+1=26+25+22+21+20(贪心,按照 二的次幂依次减直至满足)
001/100/111 = (147)8
0110/0111 = (67)16
先把十进制换为二进制,
然后二进制分别每三位、四位画线求出八进制、十六进制
二、C语言的编译链接过程
示例:图示
首先我们写完的是 .c/.cpp 源文件此时他是文本文件;
接着通过预编译生成 .i 预编译文件此时他还是文本文件;
再通过编译生成 .obj 目标文件 此时他变成了二进制目标文件;
最后通过链接生成 .exe 可执行文件。
三、数据类型及大小
int main()
{
printf("char :%d\n", sizeof(char));
printf("short :%d\n", sizeof(short));
printf("int :%d\n", sizeof(int));
printf("long int :%d\n", sizeof(long int));
printf("long long :%d\n", sizeof(long long));
printf("float :%d\n", sizeof(float));
printf("double :%d\n", sizeof(double));
printf("long double :%d\n", sizeof(long double));
printf("bool :%d\n", sizeof(bool));
return 0;
}
执行结果:
总结:(5+3+1+1)
//char(1) short(2) int(4) long int(4) long long(8)
//float(4) double(8) long double(8/12/16)
//bool(1)
//void
(1字节 =>8bit)
四、变量、常量、标识符
变量:其值可读可写
全局变量:
定义在函数体外,在执行期间变量存储在 .data 区
局部变量:
定义在函数内部,在执行期间变量存储在 .stack栈帧 区
当全局变量与局部变量重名时:
从上往下,遵循就近原则
例:
#include<stdio.h>
int max = 99;
int main()
{
int a = max;
int max = 100;
a = max;
printf("a=%d\n",a);
return 0;
}
结果:
常量:其值只可读不可写
宏常量:
用#define定义(结尾无 ;)
#define PI 3.14
常变量:
用const修饰
const int a = 0;
枚举常量:
用enum修饰
enum week = {Mon = 1, Tues = 2, Wed =3, Thurs =4, Fir = 5, Sat =6, Sun =7};
赋值:
enum week a = Mon; //a = 1;
字符及字符串常量:
单引号是字符的定界符:‘a’ => 97
双引号是字符串的定界符:“a” => 97 \0
转义符: \
1.将字符转义使其具有特殊含义
例:\r 回车符,将当前位置移到本行开头
//\r 回车符,将当前位置移动到本行开头,既光标移动到本行最前面,如printf("")中最前位置
char ch_r1[] = { "Hello\rWorldabc" };
char ch_r2[] = { "Hello\rabc" };
int size_r1 = sizeof(ch_r1); //r1的大小(15,字符串结尾\0 + \r + 其他)
int len_r1 = strlen(ch_r1); //r1的长度(14,不算\0)
int size_r2 = sizeof(ch_r2);//(10)
int len_r2 = strlen(ch_r2);//(9)
printf("%s\t size_r1: %d\t len_r1: %d\n",ch_r1, size_r1, len_r1);
printf("%s\t size_r2: %d\t len_r2: %d\n", ch_r2, size_r2, len_r2);
结果:
例:/0 空字符,后边的内容不打印
printf("abc\0dfef\n" );
结果:
例:\000 1到3位8进制数所代表的任意字符 (三位以内都可以,出现8、9就自动截断)
char ch_ei1[] = { "Hello\141cd" };
char ch_ei2[] = { "Hello\181cd" }; // ch_ei2[] = { "Hello\181cd" } = {"Hello\00181cd"}
int size_ei1 = sizeof(ch_ei1); //ch_ei1的大小(9,字符串结尾\0 + \144=a + 其他)
int len_ei1 = strlen(ch_ei1); //ch_ei1的长度(8)
int size_ei2 = sizeof(ch_ei2); //ch_ei2的大小(11,字符串结尾\0 + \1——对应十进制字符 + 其他)
int len_ei2 = strlen(ch_ei2); //ch_ei2的长度(10)
printf("ch_ei1:%s\t size_ei1:%d\t len_ei1:%d\n", ch_ei1, size_ei1, len_ei1);
printf("ch_ei2:%s\t size_ei2:%d\t len_ei2:%d\n", ch_ei2, size_ei2, len_ei2);
结果:
例:\xhh 16进制数所代表的任意字符
char ch_x[] = { "Hello\x61" }; //ch_x[] = { "Hello\x61" } = { "Helloa" }
int size_x = sizeof(ch_x); //ch_x的大小(7,字符串结尾\0 + \x61=a + 其他)
int len_x = strlen(ch_x); //ch_x的长度(6)
printf("ch_x: %s\t size_x: %d\t len_x: %d\n", ch_x, size_x, len_x);
结果:
2.将定界符、转义符转义
如:
’ \’ ’ => ’
’ \\ ’ => \
总结
1.进制转换:按权求和
2.C编译链接过程:.c —> .i —> .obj —> .exe
3.全局局部重名:就近原则
4.转义符