系列文章目录
前言
一、变量的申明
告诉计算机,我要用一块内存
int a,b,c //全局变量的声明
void Fun()
{
a = 10; //局部变量的声明
b = 20;
}
总结:
声明就是告诉计算机,我要用一块内存,宽度和存储格式有数据类型决定
计算机给一块内存,取决于变量作用范围,全局变量在编译完就已经分配了内存空间,局部变量所在程序被调用才会分配空间
全局变量不定义值默认是0,但局部变量使用前一定赋初值
二、类型转换
从C语言角度来说,我们需要一个容器存储数据,我们认为一个char足够,我们不断往里面存值,发现不够了,得用另外一个内存来存
#inclde"stdafx.h"
void Fun()
{
char c = 10;
int i = c;
}
先看几行汇编
mov al,ff
movsx cx,al
mov al,80
movsx cx,al
这个是先符号扩展,再传送,ecx前面不变,就后面al变
mov al,ff
movzx cx,al
mov al,80
movzx cx,al
先零扩展,再传送,ecx前面都变成0了
扩展
#inclde"stdafx.h"
void Fun()
{
char i = 0xff;
short k = i;
int h = i;
}
反汇编
如图,是movsx的形式,是有符号的
如果是undesigned,就是无符号
第二个例子
#inclde"stdafx.h"
void Fun()
{
int ni = 0x12345678;
short si = ni;
char ci = ni;
}
如图,int是四个字节的,我们想看看能不能存储到更短的short,可以存进去,只是只能存储相对应位的低位,比如si上存5678,ci上就是78
如果两个不同类型的变量,结果是比较类型比较大的那个类型
反汇编代码如下
#inclde"stdafx.h"
void Fun()
{
char b = 1;
unsigned int a = 0xFFFFFFFE;
printf("%d",a+b)
}
结果是-1,这里提个疑问,为什么是这样?
反汇编:
正常编程没有人这样写。。。。不管是怎么输入的,计算机都是存储一样的码
这里是printf%d就已经告诉他,这是有符号的了。。。。。
三.语句and程序块
void Fun(