第一课:数制转换,变量常量

目录

  • 第一课
  • 前言
  • 一、进制转化
    • 规则:
  • 二、c语言的编译链接过程
  • 三、变量、常量、标识符
    • 两个凡是:
    • 全局变量与局部变量的不同
    • 全局变量位置存在争议时
    • 全局变量与局部变量重名时
    • 常量:可读不可写
        • 宏常量:
        • 常变量:
        • 枚举常量:
        • 字符以及字符串常量:
      • 转义符 : \
  • 四、数据类型以及字节大小

第一课

前言

涉及知识点:
进制转化、编译链接过程、数据类型以及字节大小、变量、常量、标识符

一、进制转化

规则:

按权来求和

(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
先把十进制换为二进制,
然后二进制分别每三位、四位画线求出八进制、十六进制

二、c语言的编译链接过程

第一课:数制转换,变量常量_第1张图片

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

转义符 : \

第一课:数制转换,变量常量_第2张图片
注意点:

 ’ \ '  '  => '
 ' \\ ' => \

四、数据类型以及字节大小

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;
}

执行结果:

第一课:数制转换,变量常量_第3张图片

char 1          bool 1   
short:2
     int    /long int  / float        4
long long   / double  /long double    8

心得 :

  1. 进制转换一般先转化为二进制,然后再转化为其他进制(二进制为过渡态)
  2. 全局局部重名:就近原则
  3. 编译从上往下,注意变量的前后位置
  4. 深刻理解转义符的概念

你可能感兴趣的:(第一课:数制转换,变量常量)