C语言:位运算符----与(),或(|),非(~),异或(^),左移(<<)和右移(>>)

C语言 基础开发----目录


一、位运算符----简介

位运算符 就是按二进制位进行运算。

C语言中位运算符主要包括六种,具体如下:
与(&),或(|),非(~),异或(^),左移(<<)和右移(>>)

位运算符含义说明
&按位有0为0,双1为1: 1&1=1,1&0=0,0&1=0,0&0=0
只有两者对应位都为1,结果对应位才为 1,否则为 0
I按位有1为1,双0为0: 1I1=1,1I0=1,0I1=1,0I0=0
只要两者对应位有一个为1,则结果对应位就为 1,否则为 0
~按位取反1变0,0变1: ~1=0, ~0=1
如果该位为 1,则结果对应位为 0
如果该位为 0, 则结果对应位为 1
^按位异或不同为1,相同为0: 1^1=0, 1^0=1, 0^1=1, 0^0=0
只有两者对应位不一样,则结果对应位才为 1, 否则为 0
<<左移左移n位就是乘以2的n次方
所有位依次向左移动,高位丢弃,低位补0
>>右移右移n位就是除以2的n次方
无符号数据:所有位依次向右移动,高位补0,低位丢弃
有符号数据:所有位依次向右移动,符号位不变,低位丢弃

二、位运算符----详细说明

1. 位与运算(&):有0为0,双1为1

只有两者对应位都为1,结果对应位才为 1,否则为 0

变量十六进制数值二进制数
a0x030000 0011
b0x0A0000 1010
a&b0x020000 0010

举例说明:

#include <stdio.h>

int main(int argc, char *argv[])
{
	unsigned char a=0x03,b=0x0A;
	
	printf("a=0x%X\n",a);
	printf("b=0x%X\n",b);
	printf("a&b=0x%X\n",a&b);
	
	return 0;
}

运行结果如下:

在这里插入图片描述

2. 位或运算(|):有1为1,双0为0

只要两者对应位有一个为1,则结果对应位就为 1,否则为 0

变量十六进制数值二进制数
a0x030000 0011
b0x0A0000 1010
aIb0x0B0000 1011

举例说明:

#include <stdio.h>

int main(int argc, char *argv[])
{
	unsigned char a=0x03,b=0x0A;
	
	printf("a=0x%X\n",a);
	printf("b=0x%X\n",b);
	printf("a|b=0x%X\n",a|b);
	
	return 0;
}

运行结果如下:

在这里插入图片描述

3. 位取反运算(~):1变0,0变1

如果该位为 1,则结果对应位为 0。
如果该位为 0, 则结果对应位为 1。

变量十六进制数值二进制数
a0x030000 0011
~a0xFC1111 1100

举例说明:

#include <stdio.h>

int main(int argc, char *argv[])
{
	unsigned char a=0x03,b=~a;
	
	printf("a=0x%X\n",a);
	printf("b=0x%X\n",b);
	
	return 0;
}

运行结果如下:

在这里插入图片描述

4. 位异或运算(^):不同为1,相同为0

只有两者对应位不一样,则结果对应位才为 1, 否则为 0

变量十六进制数值二进制数
a0x030000 0011
b0x0A0000 1010
a^b0x090000 1001

举例说明:

#include <stdio.h>

int main(int argc, char *argv[])
{
	unsigned char a=0x03,b=0x0A;
	
	printf("a=0x%X\n",a);
	printf("b=0x%X\n",b);
	printf("a^b=0x%X\n",a^b);
	
	return 0;
}

运行结果如下:

在这里插入图片描述

5. 左移运算(<<)

所有位依次向左移动,高位丢弃,低位补0。

变量十六进制数值二进制数
a0x030000 0011
a<<20x0C0000 1100

举例说明:

#include <stdio.h>

int main(int argc, char *argv[])
{
	unsigned char a=0x03;
	
	printf("a=0x%X\n",a);
	printf("a<<2=0x%X\n",a<<2);
	
	return 0;
}

运行结果如下:

在这里插入图片描述

6. 右移运算(>>)

无符号数据:所有位依次向右移动,高位补0,低位丢弃。

变量十六进制数值二进制数
a0x0831000 0011
a>>10x410100 0001

举例说明:

#include <stdio.h>

int main(int argc, char *argv[])
{
	unsigned char a=0x83;
	
	printf("a=0x%X\n",a);
	printf("a>>1=0x%X\n",a>>1);
	
	return 0;
}

运行结果如下:

在这里插入图片描述

有符号数据:所有位依次向右移动,符号位不变,低位丢弃。

变量十六进制数值二进制数
a0x0831000 0011
a>>10xC11100 0001

举例说明:

#include <stdio.h>

int main(int argc, char *argv[])
{
	char a=0x83;
	printf("a=0x%X\n",(unsigned char)a);
	printf("a>>1=0x%X\n",(unsigned char)(a>>1));
	
	return 0;
}

运行结果如下:

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/5645.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类和对象(三)

类和对象&#xff08;三&#xff09; 拷贝构造函数&#xff1a; 当我们想要将一个已确定的类变量的值拷贝给另外一个相同类型的类变量&#xff0c;有什么快捷的方法吗&#xff1f; 就相当于定义了一个int类型的i10&#xff0c;想将i复制给一个刚初始化的遍历j&#xff0c;in…

2022国赛E题完整成品文章数据代码模型--小批量物料的生产安排

基于LSTM循环神经网络的小批量物料生产安排分析 摘要 某电子产品制造企业面临以下问题&#xff1a;在多品种小批量的物料生产中&#xff0c;事先无法知道物料的 实际需求量。企业希望运用数学方法&#xff0c;分析已有的历史数据&#xff0c;建立数学模型&#xff0c;帮助企业…

优化测试生命周期行之有效的三种方法

确保软件质量和按时交付产品的最有效方法是什么&#xff1f;对于公司来说&#xff0c;无缺陷地为客户带来价值是一件重要的事情。随着软件开发生命周期变得越来越复杂&#xff0c;测试可能成为拖慢整个过程的瓶颈。为了加速它&#xff0c;创建了组织可以采用的多种策略和方法。…

python面向对象编程

&#x1f42c;在本次的博客当中我们要学习的是在python语言当中的面向对象的编程。我们之前学过的C语言是面向对象的编程。面向过程&#xff0c;其实就是面向着具体的每一个步骤和过程&#xff0c;把每一个步骤和过程完成&#xff0c;然后由这些功能方法相互调用&#xff0c;完…

Go语言精修(尚硅谷笔记)第十七和十八章

十七、反射 17.1 基本介绍 1 ) 反射可以在运行时动态获取变量的各种信息, 比如变量的类型(type)&#xff0c;类别(kind) 2 ) 如果是结构体变量&#xff0c;还可以获取到结构体本身的信息(包括结构体的字段、方法) 3 ) 通过反射&#xff0c;可以修改变量的值&#xff0c;可以…

react脚手架

一、首先了解一下react脚手架 .xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 a.包含了所有需要的配置&#xff08;语法检查、jsx编译devServer…&#xff09; b.下载好了所有相关的依赖 c.可以直接运行一个简单效果react提供了一个用于创建react项目的脚手架库:…

LLaMA:Open and Efficient Foundation Language Models

LLaMA&#xff1a;Open and Efficient Foundation Language ModelsIntroductionApproachPre-training DataArchitectureIntroduction 在大规模数据下训练的大模型&#xff0c;已经展示了很好的表现&#xff0c;当模型足够大的时&#xff0c;模型会出现一个涌现的能力&#xff…

Chapter8.3:控制系统校正的根轨迹法

该系列博客主要讲述Matlab软件在自动控制方面的应用&#xff0c;如无自动控制理论基础&#xff0c;请先学习自动控制系列博文&#xff0c;该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接&#xff1a;https://blog.csdn.net/qq_39032096/category_10287468…

区块链技术之密码学

密码学是研究编制密码和破译密码的技术科学&#xff0c;研究密码变化的客观规律&#xff0c;应用于编制密码以保守通信秘密的&#xff0c;成为编码学&#xff1b;应用于破译密码以获取通信情报的&#xff0c;称为破译学&#xff0c;总称密码学。在区块链中重要问题之一就是区块…

锁 一、锁的分类 1.1 可重入锁、不可重入锁 Java中提供的synchronized&#xff0c;ReentrantLock&#xff0c;ReentrantReadWriteLock都是可重入锁。 重入&#xff1a;当前线程获取到A锁&#xff0c;在获取之后尝试再次获取A锁是可以直接拿到的。 不可重入&#xff1a;当前…

Eclipse下载使用手册

Eclipse下载使用手册 目录Eclipse下载使用手册Eclipse的介绍与安装Eclipse简介Eclipse的下载Eclipse的解压Eclipse的介绍与安装 Eclipse简介 Eclipse 是一个开放源代码的&#xff0c;基于 Java 的可扩展开发平台。Eclipse官方版是一个集成开发环境(IDE)&#xff0c;可以通过安…

MySQL-自带工具介绍

目录 &#x1f341;mysql &#x1f341;mysqladmin &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;MySQL专栏&#xff1a;MySQL专栏地址 MySQL数据库不仅提供了数据库的服务器端应用程序&#xff0c;同时还提供了大量的客户端工具程序&#xff0c;如mysql&a…

Linux安装MySQL5.7MySQL8.0

Linux安装MySQL5.7一、设置yum源并安装1.1 配置rpm仓库1.1.1 更新密钥1.1.2 安装mysql yum库1.2 使用yum进行安装1.3 启动并配置开机启动二、配置MySQL2.1 获取初始密码2.2 登录MySQL2.3 修改root密码2.3.1 设置复杂密码(默认)2.3.2 设置简单的用户密码2.4 授权root用户远程登陆…

蓝桥杯第十四届校内赛(第三期) C/C++ B组

一、填空题 &#xff08;一&#xff09;最小的十六进制 问题描述   请找到一个大于 2022 的最小数&#xff0c;这个数转换成十六进制之后&#xff0c;所有的数位&#xff08;不含前导 0&#xff09;都为字母&#xff08;A 到 F&#xff09;。   请将这个数的十进制形式作…

力扣二叉树题目专题解析

题目分类大纲如下&#xff1a; 二叉搜索树 前面介绍的树&#xff0c;都没有数值的&#xff0c;而二叉搜索树是有数值的了&#xff0c;二叉搜索树是一个有序树。 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b;若它的右子树不空&#x…

滴滴滴,请看MYSQL事务的四大特征(ACID)的实现原理:晓其原理而通其实现。

一.什么是事务的四特征 原子性&#xff08;Atomicity&#xff0c;或称不可分割性&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;Durability&#xff09; 接下来&#xff0c;我们将对四大特性的具体概念以及…

java中File转为MultipartFile的问题解决

今天为了需要&#xff0c;把File需要转为MultipartFile&#xff0c;下列代码&#xff0c;编译启动都没有问题 public static MultipartFile getMultipartFile(File file){FileInputStream fileInputStream;MultipartFile multipartFile;try {fileInputStream new FileInputSt…

《JavaEE初阶》计算机网络之网络原理(应用层)

《JavaEE初阶》计算机网络之网络原理(应用层) 文章目录《JavaEE初阶》计算机网络之网络原理(应用层)前言:应用层:自定义应用层协议:如何进行自定义应用层协议自定义应用层协议的格式选择:应用层的现成协议.前言: 本章主要讲解计算机网络原理中的应用层概念以及如何自定义应用层…

centos7 安装photoprism部署私人相册

1、安装docker; 这个是前置条件&#xff0c;也很简单&#xff0c;暂且不表。 2、安装docker-compose&#xff1b; curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose #下载docker-co…

如何让你的blynk服务器随ubuntu系统启动?

昨天在ubuntu系统搭建了blynk服务器&#xff0c;无奈每次重启都要手动去启动&#xff0c;麻烦&#xff01; 今天就把它加入系统服务里面运行&#xff0c;一劳永逸 首先用WINSCP连接ubuntu在/root/文件夹下新建一个blynk文件夹 把blynk服务器文件放到文件夹中 在/etc/systemd/…