IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言 位运算符详解 (使用二进制实例深入学习理解位运算符使用原理) -> 正文阅读

[数据结构与算法]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

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:11:23  更:2021-09-30 12:11:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 9:50:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码