一. 位操作运算符:
1. 按位与&: 有0则0, 全1为1.
格式: 数1&数2; 如:5&4=4;
使用: (1). 清零特定位.
(2). 取某数中的指定位.
2. 按位或 |: 有1则1, 全0为0.
格式: 数1 | 数2; 如: 10 | 5 = 15;
使用: 将操作数某些位 置为1, 其他位不变.
3. 异或^: 参与运算的两数各对应的近位异或, 当对应的二进制位值相异时为1, 否则为0(相同为0, 不同为1).
格式: 数1^数2; 如: 10^5=15;
使用: (1). 使特定位的值取反.
(2). 不引入第三变量, 交换两个变量的值.
(3). 与0异或保留原值, 与1异或取反.
(4). 与自身相异或, 则全部清零, 如: a^a;
4. 左移运算 << : 把”<<”左边的运算数的各二进位全部左移n位, 高位丢弃, 低位补0.
int a=0;
a=a<<2; <==> a=a*4;
使用: 左移一位相当于*2, 效率比”*”更加高.
5. 右移运算 >>: 把“>>” 左边的运算数的各二进制全部右移n位, 低位丢弃.
使用: 相当于 /2, 效率比”/”更高.
二. 位运算模板: 对一个int类型的整数最后四位清零.
16位: a & 0xF0;
32位: a & 0xFFF0;
三. 其他:
1. 把一个16位的整数的各个位数求和, 每4位为一个数, 用函数写出来.
void Show()
{
int i=0;
int nNum=0001 1100 1010 0101;
int nTemp=0;
for(i=0;i<4;++i)
{
nTemp=nNum& 0x000F;
nNum+=nTemp;
nNum=nNum>> 4;
}
}
2. 浮点数存储格式:
如: 20.5
①. (20.5)5 = (10100.1)2;
※ 小数部分如何存: 0.5*2=1.0; 1拿出来保存.
为什么小数没有精确度: 拿0.3如何保存来举例.
0.3*2=0.6; 0拿出来保存, 剩下0.6.
又回到了0.6一直做这种循环运算 |
0.6*2=1.2; 1拿出来保存, 剩下0.2.
0.2*2=0.4; 0拿出来保存, 剩下0.4.
0.4*2=0.8; 0拿出来保存, 剩下0.8.
0.8*2=1.6; 1拿出来保存, 剩下0.6.
②. 10100.1 ==> 1.01001*24;
③. 4+127=131;
④. 131 ==> 10000011; (二进制)
⑥. 0 + 10000011 + 0100 + 0000 ……(补齐位数)
转成16位进制得出结果为: 41 +A4+ 00+ 00…