评论

收藏

[C++] 聊一聊C语言位操作

编程语言 编程语言 发布于:2021-06-29 15:27 | 阅读数:357 | 评论:0

  今天和大家一起聊一聊C语言的位操作,我们都知道C语言的位操作主要有与、或、非和异或。
  首先我们简单来复习一下各种操作的含义。
  与
  0 & 1 = 0
  1 & 0 = 0
  0 & 0 = 0
  1 & 1 = 1
  或
  0 | 1 = 1
  1 | 0 = 1
  0 | 0 = 0
  1 | 1 = 1
  非
  !0= 1
  !1= 0
  异或
  1 ^ 0 = 1
  0 ^ 1 = 1
  0 ^ 0 = 0
  1 ^ 1 = 0
  上面这些知识应该是大家都已经了解的,那么接下来便问大家这些操作到底有什么作用?难道仅仅是为了做一些简单的位运算?
  答案显然不是,熟练的运用这些操作,可以为你解决很多复杂的问题。
  1)与操作其实就是get操作,即获得任意位的值。
  给定任意的二进制数01010111,我想获得第4,5,6位的值,该如何操作呢?
  0101 0111
  & 0011 1000
  ------------------
  0001 0000
  2)或操作其实就是set操作,即设置任意位的值。
  给定任意的二进制数01010111,我想把第4,5,6位设置为1。
  0101 0111
  |  0011 1000
  ------------------
  0111 1111
  3)异或操作其实就是取反操作,即把任意位的0变成1,1变成0。
  给定任意的二进制数01010111,我想把第4,5,6三位由0变成1,由1变成0。
  0101 0111
  ^  0011 1000
  ------------------
  0110 1111
  在C语言里面,由于不支持二进制的写法,只支持八进制、十进制和十六进制:
  八进制            0123    以0开头
  十进制            123
  十六进制        0x123  以0x开头
  为什么介绍这些呢?给你任意的一个整数1379,要get它的第3,5,8位,我们应该如何去做呢?
  先将一个字节的3、5、8三位设置为1即1001 0100,此时我们发现如果直接将二进制转化为十进制,计算还是比较麻烦的,但是我们却很快就能得到其十六进制的值为0x54。那么接下来在C语言里面我们就可以很快的将1379 & 0x54得到我们需要的值。这就是八进制和十六进制在进行计算的时候,他的方便之处。
  最后,为了方便大家更好的记忆这三个操作的应用,大家可以简单的记为:
  与 = get
  或 = set
  异或 = 取反
DSC0000.jpg


  
关注下面的标签,发现更多相似文章