开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情。
一、常见概念
-
常量:在程序运行过程中,其值不能发生改变的量,称为常量;
通常情况下,定义常量方式:
-
const 数据类型 常量名 = 值 (不安全)
-
#define 常量名 值
-
-
变量:在程序运行过程中,其值可以发生改变的量,称为变量;
定义格式: 数据类型 变量 = 值
-
标识符:
1、不能使用系统关键字;
2、允许使用字母数字下划线;
3、不允许数字开头;
4、标识符区分大小写;
5、见名知义;
二、scanf安全问题解决:
先看例子:
#include<stdio.h>
main()
{
int a=123;
char c='t';
printf("input ");
scanf("%d%c",&a,&c);
scanf("%d%c",&a,&c);
scanf("%d%c",&a,&c);
printf("%d %c ",a,c);
return 0;
}
运行之后会发现,当输入a回车后,会直接跳过下面2个[scanf语句],直接输出为
123
t;
其原因是:对于scanf("%d%c",&a,&c),scanf语句执行时,其中有一个参数不匹配,那就从这个地方跳出,忽略这个scanf后面所有的参数,而去执行下一条语句。
解决方法是:scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,如果scanf()函数全部正常读取,它就返回几。但这里还要注意另一个问题,如果输入了非法数据,键盘缓冲区就可能还有残余信息问题。
#define _CRT_SECURE_NO_WARNINGS
pragma warning(disable:4996)
三、原码、反码与补码
下面通过一些例子来体会领悟各自的用法:
-
char ch = 10;
原码:0000 1010
反码:0000 1010
补码:0000 1010
-
char ch1= -10;
原码:1000 1010
反码:1111 0101
补码:1111 0110 f6
-
ch-ch1=0;
补码:0000 1010
补码:1111 0110
1 0000 0000
0000 0000
注意
0在计算机中存储的方式:
int a=0;
0000 0000
4. 简单的加减法
76 - 32:76+(-32) = 44
原码:0100 1100 反码:0100 1100 补码:0100 1100
原码:1010 0000 反码:1101 1111 补码:1110 0000
补码:0100 1100 补码:1110 0000 1 0010 1100 补码:0010 1100 反码:0010 1100 原码:0010 1100 44
四、汇编语言知识补充
- 汇编语言常用命令:
mov 移动; add 添加; push 压栈; pop 出栈; call 调用;
-
eax 32位寄存器简单加法计算:
//__asm //{ // mov a, 10 // mov b, 20 // mov eax, a // add eax, b // mov c, eax //} -
断点和单步调试:
断点: 在选中行单击或按F9
调试程序:在“调试”中选择“开始调试”或按F5
逐语句执行:F11
逐过程执行:F10
跳出过程:Shift+f11
停止调试:Shift+F5