涉及知识点:
进制转化、编译链接过程、数据类型以及字节大小、变量、常量、标识符
按权来求和
(103)10 =>(1100111)2 => (147)8 =>(67)16
103=64+32+4+2+1=2^6^+2^5^+2^2^+2^1^+2^0^(贪心,按照 二的次幂依次减直至满足)
001/100/111 = (147)8
0110/0111 = (67)16
先把十进制换为二进制,
然后二进制分别每三位、四位画线求出八进制、十六进制
1.写完代码是 .c/.cpp源文件 (文本文件)
2.接着预编译生成 .i预编译文件(文本文件)
3.通过编译生成 .obj 目标文件(二进制目标文件)
4.通过来链接生成 . exe 可执行文件
程序——是静态的
进程——程序的执行,是动态的
凡是在函数之外定义的变量,在数据区域给它分配空间
凡是在函数之内定义的变量,在栈区给它分配空间
1.时机不同
. data 数据区域
(全局变量,在进入函数之前,由系统就将其分配了空间)
. stack 栈区域
(局部量,在运行函数时,分配一个栈帧,才能给局部变量分配空间)当调用时分配空间,当调用结束时,则回收分配的空间,变量将不复存在。
2. 存储区域不同
全局变量 ——数据域 .data
局部变量 ——栈域 .stack
下面代码是否可以运行?
#include
int g_max = 1;
int fun()
{
int a =2 ;
g_max = 1;
g_min = 2;
}
int g_min = 0;
int main(){
int a = 10;
g_max = a;
g_min = a;
fun();
return 0;
}
程序不可执行,程序运行时由上到下,全局变量,向下可行,在编译fun()函数时,编译到g_max 可执行,上面有全局变量g_max,当编译到g_min时,编译的过程中未找到全局变量 g_min,所以不能执行。
全局变量都存放在数据域,为什么运行过程中不可读呢?
编译链接成功之后才能运行,虽然全局变量都存放在数据域,但是如果编译不成功,就无法执行。
正确的代码块如下:
#include
int g_max = 1;
int g_min = 0;
void fun()
{
int a =2 ;
g_max = 1;
g_min = 2;
}
int main(){
int a = 10;
g_max = a;
g_min = a;
fun();
return 0;
}
从上往下,遵循就近原则
#include
int max = 18;
int main()
{
int a = max;
int max = 100;
a = max;
printf("a=%d\n",a);
return 0;
}
a = 100
用#define 定义(结尾无 ;)
#define PI 3.14
用const 修饰
const int x = 10;
用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
’ \ ' ' => '
' \\ ' => \
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;
}
执行结果:
char 1 bool 1
short:2
int /long int / float 4
long long / double /long double 8
心得 :