变量:
变量的意义确定目标并提供存放的空间
变量的命名规则:
- 只能以字母或下划线开始
- 不能以数字开始
- 一般小写
- 关键字不允许用
常量:
- define预处理器
- const关键字
- 两者区别
define 与const
符号变量define是预编译指令,在预编译的时候仅仅进行字符替换,预编译后符号常量就不存在了,例如define PI 3.1415926 ,编译以后就不存在PI了,所有的PI都被换成了3.1415926。而且PI没有存储单元。而常变量const变量要占用存储单元,有变量值,只是值不能改,它有符号变量的优点,而且比较方便。
1.const定义的常数带类型,define不带类型,
2.const是在 编译运行的时候起作用,而define是在编译的预处理阶段起作用。
3.define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。
4.#deifne定义后赋值不可修改,const可通过指针修改
二进制,八进制,十进制,十六进制
二进制机器识别
我们习惯于十进制的数
一个位只能表示0,或者1两种状态,简称bit,一个位是一个bit.
一个字节为八个二进制,称为8位,简称BYTE,八个比特是一个字节
一个字为两个字节,简称WORD,两个字为双字,简称DWORD。八进制以八为基数的数制系统,C语言当中0表示八进制,如0444
十六进制以十六为基数的数制系统,C语言当中0X表示八进制,如0X12
原码,反码,补码
原码:用第一个数表示符号,其余表示值。因为第一位是符号位,所以8位二进制数的取值范围就是:[1111_1111 , 0111_1111] 即 [-127 , 127] ,原码是容易被人脑所理解的表达方式
反码:正数的补码反码是其本身,负数的反码是符号位保持不变,其余位取反。例如正数1的原码是[0000_0001],它的反码是是其本身[0000_0001],
-1的原码是[1000_0001],其反码是[1111_1110].补码:正数的补码是其本身,负数的补码是在其反码的基础上+1,例如正数1的原码是[0000_0001],他的补码是其本身[0000_0001],
-1的补码是[1111_1111]
大端对齐与小端对齐
- 大端对齐:高位字节放在内存低端,低位字节放在内存高端
- 小端对齐:高位字节放在内存高端,低位字节放在内存低端
变量
int
- int 是一个32位二进制整数,在内存中展4个字节
C 中用%d printf输出一个有符号的整数,%u printf输出一个无符号的整数 - 整数溢出
计算一个整数的时候超过整数能够容纳最大的单位后,整数会溢出,溢出的结果就是高位舍弃。
当一个小的整数赋值给大的整数,符号位不会丢失,会继承。
char
char 占用一个字节的大小的字符,本质是一个整数,一个只有一个字节的整数。
char carry[];
字符串
int array[] 数组
定义方式
char t[];
char t[10];
char t[10]={0}
浮点数
如果是整数计算,尽量不要用浮点数,浮点数的效率很低
float: 四个字节
double: 八个字节
long double : 十六个字节
vloat
是一个修饰符,防止编译器优化代码,因为这个变量可能会被意外的地方或不同线程修改,加上这个关键字编译器就不会去假设这个值了
register
声明变量在CPU寄存器里面
volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了
scanf
通过获取键盘放入变量中,变量一点要使用变量地址接收
%o输出八进制无符号的
%c输出字符
%d输出整数
%x输出16进制小写
%X输出16进制大写
\t输出空格
%f输出浮点数