C语言 位运算符详解 (使用二进制实例深入学习理解位运算符使用原理)

Posted 2654501228

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 位运算符详解 (使用二进制实例深入学习理解位运算符使用原理)相关的知识,希望对你有一定的参考价值。

C语言中位运算符共有六种

目录

1.&(按位与)

2. |(按位或)

3.^(按位抑或)

4.~(按位取反)

5.<<(左移)

6. >>(右移)

位( bit 是计算机中表示信息的最小单位,一般用 0和 1表示。位运算符是对其操作数按其二进制形式逐位进行运算。
注: 参加位运算的 操作数必须为整数。
接下来我们逐一讲解位运算符的计算原理
1.&(按位与)
  用于清零、取某些指定位、保位
(&的计算原理)
0 & 0 = 0,     1 & 0 = 0,    1 & 1 = 1.
#include<stdio.h>
int main(void)
{
	int a=3,b=5,c;
	c=a&b;
	printf("%d",c);  //结果c=1
	return 0;
 

上面使用 按位与&  的一段程序运行结果为c=1

 我们用二进制来分析一下它的计算规则。

a=3  二进制为 0000 0011

b=5  二进制为 0000 0101


a&b  的意思就是01算法,通俗来讲a和b的第八位都为1,所以第8位&后的结果为1,前面7位&后的结果都为0

按位计算结果是0000 0001


所以最终c=a&b的结果为c=1

1)清零 

#include<stdio.h>
int main(void)
{
	int a=3,b=0,c;
	c=a&b;
	printf("%d",c);  //结果c=0
	return 0;
 

a=3  二进制为 0000 0011

b=0  二进制为 0000 0000


a&b  8个位的运算结果都为0

所以最终c=0

(2) 取某些指定位

假定a=5,二进制为0000 0011

我们要取a的第3黑第6位

只需计算

0000 0101和1111 1111的结果

可得 c的二进制为0000 0101

所以a的第3位为0,第6位为1

 (3)保位

 例如计算a&b要保a的哪一位,只需将b中对应的位设为1,其余的位设为0.即可实现a的保位

2. |(按位或)用于对一个数据的某些位定值为1

对应位之间按位或的计算 即  0 | 0= 0 ,  1 | 0= 1  , 0 | 1= 1  ,  1 | 1= 1 

( | 的计算原理)

#include<stdio.h>
int main(void)
{
	int a=3,b=5,c;
	c=a|b;
	printf("%d",c);  //c的结果=7
	return 0;
 

 c=a|b

a=3  二进制为 0000 0011

b=5  二进制为 0000 0101

计算结果为0000 0111 即c=7

3.^(按位抑或)

(计算原理)

对应位置见的抑或运算,相同为0,相异为1

即 0 ^ 0=0  , 0 ^ 1= 1  , 1 ^ 0= 1  , 1 ^ 1= 0 。

#include<stdio.h>
int main(void)
{
	int a=3,b=5,c;
	c=a^b;
	printf("%d",c);//c的结果为6
	return 0;
 

c=a^b

a=3  二进制为 0000 0011

b=5  二进制为 0000 0101

计算结果为0000 0110 即c=6

 4.~(按位取反)

#include<stdio.h>
int main(void)
{
	int b=5,c;
	c=~b;
	printf("%d",c);//c的结果为-6
	return 0;
 

b=5  b的二进制为0000 0101

~b为1111 1010,用十进制表示即为-6。

5.<<(左移) 

右边空出的位用 0 填补,高位左移溢出则舍弃该高位。左移1 位相当于该数乘以 2 ,但只 适用于该数左移时被溢出舍弃的高位中不包含1 的情况。
#include<stdio.h>
int main(void)
{
	int b=5,c,d;
	c=b<<1;
	d=b<<3;
	printf("c=%d d=%d",c,d);//最终结果c=10,d=40
	return 0;
 

b<<左移n个单位即b乘以2^n

 6. >>(右移)

#include<stdio.h>
int main(void)
{
	int b=40,c,d;
	c=b>>1;
	d=b>>3;
	printf("c=%d d=%d",c,d);//结果为c=20,d=5
	return 0;
 

b<<左移n个单位即b除以2^n

以上是关于C语言 位运算符详解 (使用二进制实例深入学习理解位运算符使用原理)的主要内容,如果未能解决你的问题,请参考以下文章

C语言位运算符详解

C语言位运算符详解

js中的位运算

深入理解计算机系统

Python笔记_第一篇_童子功_0.内存详解(含位运算)

大一C语言学习笔记---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?