聊一聊C语言位操作

简介: 聊一聊C语言位操作

08510c1b595ef3516453bb3016d64455.png

今天和大家一起聊一聊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变成11变成0

给定任意的二进制数01010111,我想把第4,5,6三位由0变成1,由1变成0

   0101 0111

^  0011 1000

------------------

   0110 1111

 

C语言里面,由于不支持二进制的写法,只支持八进制、十进制和十六进制:

八进制            0123    0开头

十进制            123

十六进制        0x123  0x开头

 

为什么介绍这些呢?给你任意的一个整数1379,要get它的第358位,我们应该如何去做呢?

先将一个字节的358三位设置为11001 0100,此时我们发现如果直接将二进制转化为十进制,计算还是比较麻烦的,但是我们却很快就能得到其十六进制的值为0x54。那么接下来在C语言里面我们就可以很快的将1379 & 0x54得到我们需要的值。这就是八进制和十六进制在进行计算的时候,他的方便之处。

 

最后,为了方便大家更好的记忆这三个操作的应用,大家可以简单的记为:

= get

= set

异或 = 取反

目录
相关文章
|
6月前
|
算法 安全 C语言
C语言中的位操作运算符有什么作用
C语言中的位操作运算符有什么作用
60 0
|
6月前
|
C语言
C语言进阶教程(位操作和进制数的表示)
C语言进阶教程(位操作和进制数的表示)
74 0
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
33 3
|
6天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
21 6
|
26天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
34 10