开发者社区> 问答> 正文

请问C语言中位运算有什么用啊,一般都在哪些项目会使用到?

友人-a 2017-11-30 20:49:55 1223

想了解一下位运算的用途,希望大神们能帮我解惑。

分享到
取消 提交回答
全部回答(6)
  • 叶提
    2019-07-17 21:46:50
    已采纳

    位运算速度比较快,移位就可以,对性能要求比较高的算法或逻辑会常用

    1 0
  • nothingfinal
    2019-07-17 21:46:51

    节省内存,单片机中使用较多

    0 0
  • xumaojun
    2019-07-17 21:46:51

    节省内存,单片机中使用较多

    0 0
  • calm86104
    2019-07-17 21:46:51

    有意思的问题,我来小答一下,以抛砖引玉。
    目前我所知道的有两个:
    第一种情况: 如上面同学所说,提升运算速度。
    举个例子:
    int i = 2;
    int k = i * 1024;

    上面这个例子,在计算 k 的值,一般我们都会这么写。
    这么写有问题吗?
    当然没有问题,还相当标准。
    但是这么写对性能没有什么帮助,如果我们清楚位运算会更快,那么驱动或者硬件的老手就会这么写:
    k = i << 10;

    当然性能上,对于大型服务器,不会因为你写了这么一句话,就会提升很多,但是如果是单片机的话,可能就会快很多。
    还有人问,大部分我可能不是 乘以 1024,而是 乘以 1000,这种情况岂不是不行了。

    我回答是:分情况。如果你的数值是约数,不需要精确的话,那么你依然可以这么写,如果是需要精确数值的话,恐怕不行。

    第二种情况:减少内存损耗,好吧,也是因为单片机的原因。
    举个例子:如果我有 4096 个成员,要标志,4096 个成员,是男是女(比如 1 是男,0 是女),大部分情况下,我们会这么写:
    unsigned char member[4096]
    内存损耗为 sizeof(member) == 4096 个字节

    但是如果我们可以这么定义:
    uint32_t member[128]
    内存损耗为 sizeof(member) == 128 * 4 = 512 个字节 = 4096 位
    也就是说,每一位代表一个成员的性别,1 是男,0 是女,是不是会节省很多内存呢?

    0 0
  • 靠谱的小号
    2019-07-17 21:46:50

    一个简单的应用:设计options。比如,网络状态

    typedef NS_OPTIONS(NSUInteger, NetworkOptions) {

    Network_None = 0,
    Network_2G = 1<1,
    Network_3G = 1<2,
    Network_4G = 1<3,
    Network_wifi = 1<4,

    };

    当需要在弱网或无网状态下进行某些操作,那么可以用Network_None|Network_2G|Network_3G表示

    1 0
  • 落叶梧桐雨
    2019-07-17 21:46:50

    在java里面位运算你可以看下Integer类中的几个方法,几乎大部分都是用的位运算,因为位运算是在硬件层面就可以直接计算的所以更快,如果采用简单的迭代和加减乘除的话效率不在一个层级

    0 0
滑动查看更多

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题