inline
内联函数(c++, c):
- inline只适合涵数体内代码简单的函数数使用,不能包含复杂的结构控制语句例如while、switch,并且内联函数本身不能是直接递归函数(自己内部还调用自己的函数)
- inline关键字作用就是直接把函数语句复制到调用函数的地方。
- inline可以避免函数被频繁调用,不断地有函数入栈,造成栈空间或栈内存的大量消耗
二进制数、位、 字节
二进制整数
c用字节(byte)表示储存系统字符集的大小, 一字节8位, 即八位组(octet), 编号为七的称为高阶位(high-order bit), 编号为0的称为低阶位(low-order bit)。
1字节可储存0-255范围内的数字, 通过不同的方式解释位组合(bit pattern), 例如, 以signed char 则为-128-127。
有符号整数
最常用的数字系统为二进制补码(two’s-complement).
二进制反码(one’s-complement)反转位组合中的每一位形成一个负数。
二进制浮点数
分两部分组成:二进制小数和二进制指数
二进制小数
0.527 = 1/2 + 0/4 + 1/8;
浮点数表示法
数字实际值由二进制小数乘以2的指定次幂组成,
例:一个浮点数乘以4, 其二进制小数不变, 指数乘以2.
其他进制数
八进制(octal)
每个八进制位对应3个二进制位。
0377(8) = 11111111(2)
十六进制(hexadecimal)
该系统基于十六的幂
c有两个操纵位的工具
- 6个作用于位的按位运算符
- 字段(field)数据形式
c按位运算符
分按位运算符和移位运算符
按位逻辑运算符
二进制取反或按位取反: ~
二进制中1变为0, 0变为1。
按位与: &
(10010011) & (00111101) //表达式
(00010001) //结果值
按位或: |
(10010011) | (00111101) //表达式
(00010001) //结果值
按位异或: ^
只有两个运算对象相应的位一个为1, 另一个为0, 结果才为1。
(10010011) ^ (00111101) //表达式
(10101110) //结果值
用法:掩码(mask)
按位与常用于掩码。
假设mask为2, 如下:
flags = flags & mask;
输出把除1号位以外的位置都设为0, 1号位的值不变。
掩码隐藏了flags中相应的位。
用法: 打开位(设置位)
需要打开一个值的特定位, 同时保持其他位不变, 可以使用按位或运算符
假设flags 为00001111, mask为10110110.
flags | mask
(00001111) | (10110110)
(10111111)