C语言位操作

来源:互联网 发布:在淘宝上做虚拟充值 编辑:程序博客网 时间:2024/06/15 08:52

一. 位操作运算符:

      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…

0 0
原创粉丝点击