C语言的位操作

栏目: C · 发布时间: 5年前

内容简介:以下所有都是针对64位机来说的.一个byte占8个bit,对于bit的操作就是位运算.左移,在bit级别对一个数整体向左移动,在右边用0填充. 例如对一个整数1,二进制表示为

以下所有都是针对64位机来说的.

bit

一个byte占8个bit,对于bit的操作就是位运算.

左移,在bit级别对一个数整体向左移动,在右边用0填充. 例如对一个整数1,二进制表示为 1 , 向左移动一个bit,二进制就变成了 10 , 也就是十进制的2,再向左移一位, 二进制变成了 100 , 对应的十进制数是 4 , 对于左移运算, 移动n位相当于原数 乘以2的n次方, 但是如果溢出的话, 结果就不是理想情况中的结果了.

对于右移, 把原有的位移动以后, 有两种填充方式. 一种是在左边填补原来最高位的值, 这称为算术右移, 另一种方式是填补0, 称为逻辑右移.

.. code:: java

$ cat Test.java
class Test {
    public static void main(String[] args) {
        int i = -10;
        System.out.println(i<<1);
        System.out.println(i>>1);
        System.out.println(i>>>1);
    }
}
$ javac Test.java && java Test
-20
-5
2147483643

>>> 是逻辑运算, 在左边填充了大把的0, 所以补码认为这是正数, 而算术右移保持 了算术上的正确性, 于是就有了上面的结果.

用位运算优化

cpu计算乘法很慢,原因是对于一个m位乘以n位的运算,要计算O(m * n)次, 而对于加法, 只要计算O(max(m,n))次.

所以,可以利用左移来优化乘法, 例如 11*12, 可以变成 11 * (2^3 + 2^2) , 就是 11 << 3 + 11 << 2 , 便会大幅度提高运算速度.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

小程序大能量

小程序大能量

肖月 / 人民邮电出版社 / 2018-11 / 49.80元

本书主要针对零基础的读者,详细讲解小程序的搭建以及小程序的运营等知识。全书共有6章。第 1章重点介绍了小程序诞生的原因以及小程序的发展历史;第 2章详细讲解了快速搭建小程序的方法;第3章向读者阐述了小程序和互联网运营的关系;第4章主要介绍了小程序运营的意义;第5章全面分析了打造爆款小程序的策略;第6章重点总结了小程序的营销推广策略。 本书可以作为对小程序感兴趣的个人以及企业的学习用书,帮助读者快速......一起来看看 《小程序大能量》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具