您的位置:首页 > 编程语言 > C语言/C++

C语言位操作

2016-06-10 10:20 696 查看
一. 位操作运算符:

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…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言