进制
进制转换:
十进制转二进制:
求余,直到商为0为止,过程中产生的余数就是二进制(逆序)
二进制转十进制:
2^(n-1) 每位都相加
二进制转八进制:
每三位二进制位对应一位八进制
二进制转十六进制:
每四位二进制位对应一位十六进制位
超过10用ABCDEF表示
在c语言中:
代码中0开头的是八进制数据,0x/0X开头的是十六进制数据
printf %o以八进制显示 %x以十六进制显示
%#o %#x 以对应格式显示不同进制
原码、反码、补码
原码:数据的二进制
反码:
正数的反码就是原码
负数的反码是原码除符号位外,其他位按位求反
补码:数据在内存中都是以补码形式存储
正数的补码就是原码
负数的补码:
1、转换成二进制的原码
2、原码的符号位不变,其他按位求反得到反码
3、反码+1得到补码
-127
1111 1111 原码
1000 0000 反码
1000 0001 补码
0x81
%hd 0000 0000 1000 0001 == 129
函数
C语言中管理代码的最小单位
运算优先级:单目、算数、位、关系、逻辑、三木、赋值
进程映像
程序:存储在磁盘上的可执行文件(二进制文件、脚本文件)
进程:正在系统中运行的程序
进程映像指的是系统中进程内存的分布情况
text 代码段:存储二进制指令、常量,权限只读,强制修改会产生段错误
data 数据段:初始化过的全局变量,初始化过的静态局部变量
bss 静态数据段:未初始化过的全局变量,未初始化过的静态局部变量,在程序运行前会自动清理为0
stack 栈:局部变量、块变量,由操作系统管理,自动申请、自动释放,大小会随着程序的运行而变化,缺点:小
heap 堆:由程序员手动管理 优点:足够大
常用类型限定符
extern
用于声明变量,意思是告诉编译器此变量已经在别处定义好了,可以放心使用
注意:只能临时地瞒过编译器,链接时如果找不到定义语句依然会报错
声明变量语句不可赋值
static
被static修饰过的变量叫做静态变量
改变存储位置
改变局部变量的存储位置:
由stack改为data或者bss,具体取决于是否初始化
延长生命周期
延长局部变量的生命周期
限制作用域
限制全局变量、函数,只能在本文件内使用
防止全局变量、函数命名冲突,可以防止别人调用
const
"保护"变量不被显示地修改
如果,对已经初始化过的全局变量、静态局部变量用const修饰,会变常量text,不能修改
volatile
如果变量没有显示地修改,在再次使用这个变量时不会从内存中读取,而是继续使用上一次读取结果
变量用volatile修饰后,每次使用该变量时,不再做取值优化,都会从内存中读取数据
一般硬件编程、多线程编程时都要使用
volatile int num = 10;
if(num == num)
{
//有可能为假
}