【C语言】位运算符

前言

C语言中给我们提供了6个位运算符,包括2个移位运算符和其他4个位运算符(按位取反、按位与、按位异或,以及按位或)。它们可以用于对整数数据进行位运算,现在就让我们来了解一下吧!

移位运算符

移位运算符可以将位向左或向右移动,改变整数的二进制表示。'<<'是左移操作符,'>>'是右移操作符,操作数可以是任意的整数类型(包括char类型)。

i<<j的值是将i中的位左移j位得到的结果。每次从i的最左端溢出一位,然后在最右端补一个0。

i>>j的值是将i中的位右移j位后的结果。如果i是无符号数或者非负值,则需要在左端补0;如果i是负值,其结果取决于实现:一些会在左端补0,其他一些会保留符号位,补1。

注意事项:

1.为了保证代码的可移植性,最好只对无符号数进行移位运算。

2.移位运算符的优先级比算术运算符的优先级低,比如:

i<<1+2等价于i<<(1+2)而非(i<<1)+2。(意料之外的结果)

3.这两个运算符对两个操作数都会进行整型提升返回值的类型是左操作数提升后的类型。

演示:

i=13    00000000 00000000 00000000 00001101
i<<2    00000000 00000000 00000000 00110100
i>>2    00000000 00000000 00000000 00000000

注意上面i在左移右移后自身的值都不会变,如果我们int j = i<<2,来接收,j得到的是移位后的值,而i自己没有变。

复合赋值运算符

假如还是上面的i,我们想让其在左移或右移后,自身的值发生变化,可以使用复合赋值运算符:

i<<=2;
i>>=2;

按位取反运算符

 ~ 就是按位取反运算符,它是一个一元运算符(或叫单目操作符),对其操作数会进行整型提升,对操作数的每一位执行布尔运算。

它的功能是产生对操作数求反的结果。也就是将操作数二进制序列的每一个0替换成1,将每一个1替换成0。

演示:

00000000 00000000 00000000 00001011
11111111 11111111 11111111 11110100

按位与运算符

&就是按位与运算符,它对两个操作数相对应的位执行逻辑与运算。规则就是对应的二进制位,有0则为0,都为1才为1。

演示:

i    00000000 00000000 00000000 00110101
j    00000000 00000000 00000000 11101111
i&j  00000000 00000000 00000000 00100101

按位或运算符

|就是按位或运算符,规则是:对应的二进制位,只要有1,就是1。同时为0才为0。

演示:

i    00000000 00000000 00000000 00110101
j    00000000 00000000 00000000 11101111
i|j  00000000 00000000 00000000 11111111

注意:不要将位运算符&和|与逻辑运算符&&和||相混淆。即使有时候位运算会得到与逻辑运算相同的结果,但它们绝不等同。

按位异或运算符

^就是按位异或运算符,和|有些相似(都是对两个操作数执行逻辑或运算),不同的是,规则是:对应的二进制位,相同为0,相异为1。

演示:

i    00000000 00000000 00000000 00110101
j    00000000 00000000 00000000 11101111
i^j  00000000 00000000 00000000 11111010

补充

运算符& ^和|的优先级关系运算符判等运算符低。举个例子:

if (status & 0x4000 != 0) ...

这句语句无法得到我们预期的结果,这条语句会计算0x4000!=0(结果为1),接着判断status&1是否非0,而不是判断status&0x4000是否非0。

本文到此结束,祝阅读愉快^_^

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python关闭exe文件

Python关闭exe文件的代码详解 在Python中&#xff0c;我们可以使用一些代码来关闭正在运行的exe文件。在本篇文章中&#xff0c;我们将介绍如何使用Python代码来关闭exe文件&#xff0c;并提供示例代码进行演示。 关闭exe文件的原理 在深入讨论关闭exe文件之前&#xff0c;让我…

Python 引入中文py文件

目录 背景 思路 importlib介绍 使用方法 1.导入内置库 importlib.util 2.创建模块规格对象 spec importlib.util.spec_from_file_location("example_module", "example.py") 3.创建模块对象 module importlib.util.module_from_spec(spec) …

MyBatis基础教程

文章目录 一、MyBatis基本使用1.1简介1.2搭建MyBatis环境1.2.1安装MyBatis1.2.2创建MyBatis核心配置文件1.2.3创建mapper接口1.2.4创建MyBatis映射文件1.2.5实现增加功能 1.3整合log4j1.4修改与删除功能1.5查询功能1.5.1查询单个实体类对象1.5.2查询所有用户信息 二、核心配置文…

“Redis中的持久化:深入理解RDB与AOF机制“

目录 # 概念 1. RDB持久化 1.1 备份是如何执行的&#xff08;RDB过程&#xff09; 1.2 配置文件信息 1.3 RDB持久化操作 1.4 RDB优势 1.5 RDB劣势 1.6 RDB做备份 2. AOF持久化 2.1 AOF开启及使用 2.2 异常恢复 2.3 配置文件操作 2.4 AOF持久化流程 2.5 优点 2.6…

Service的作用是什么?

在Android开发中&#xff0c;Service是一个重要的组件&#xff0c;它允许应用在后台执行长时间运行的操作&#xff0c;同时不向用户显示界面。以下是关于Service的作用的详细描述&#xff0c;包括技术难点、面试官关注点、回答吸引力和代码举例。 一、技术难点 生命周期管理&…

利用Elasticsearch提升Java应用的搜索能力

引言&#xff1a; 在数据驱动的时代&#xff0c;能够快速地处理和分析大量数据变得至关重要。Elasticsearch不仅提供全文搜索功能&#xff0c;还支持复杂的数据分析&#xff0c;是现代应用中不可或缺的工具之一。 什么是Elasticsearch&#xff1f; Elasticsearch是一个高度可…

k8s基础命令集合

1、集群信息 # 显示k8s客户端和服务器版本 kubectl version# 显示当前上下文信息 kubectl config current-context# 切换上下文 kubectl config use-context <context-name># 列出所有上下文 kubectl config get-contexts# 获取集群信息 kubectl cluster-info2、节点管理…

垃圾回收管理系统设计

一、引言 随着城市化进程的加快&#xff0c;垃圾处理问题日益凸显。为了有效管理垃圾回收&#xff0c;提高资源利用效率&#xff0c;降低环境污染&#xff0c;本文设计了一套垃圾回收管理系统。该系统涵盖了数据收集与分析、智能监测与识别、资源调配与协调、用户参与与反馈、…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第42课-多人联机-实时互动

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第42课-多人联机-实时互动 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界…

hadoop搭建本地hive库保姆级教程

安装本地hive 安装的前提是hadoop完全分布式可以正常的跑起来 第一部分&#xff1a;安装mysql8.0 1.安装wget工具 yum -y install wget2.通过wget工具下载mysql源文件 注意&#xff1a;以下版本过高&#xff0c;后面安装MySQL源会失败&#xff0c;所以建议刚开始尝试换成…

记录一次基于Vite搭建Vue3项目的过程

Vue2已经于2023年12月31日停止维护了&#xff0c;2024年算是vue3的崭新的一年&#xff0c;我们的项目也基本从vue2逐渐向着Vue3过渡&#xff0c;Vue3相较于vue2有更好的开发体验&#xff0c;和ts的自然融合使得项目的结构、功能拆分变得更加的清晰&#xff1b;组合式声明有种MV…

undefined reference to `__atomic_is_lock_free‘

1 编译错误 最近在linux下写程序时使用标准库std::atomic,其中使用到is_lock_free&#xff0c;链接时提示找不到__atomic_is_lock_free函数。 /usr/bin/ld: /mnt/e/git/cpp/test/cpptest/concurrent/.obj/atomic_test.o: in function std::atomic<ObjectA>::is_lock_fr…

网络安全岗位必须知道到:高性能抓取,多线程,异步逆向分析(Js逆向破解/APP逆向破解)反爬原理和解决方法,不然你的Python会有Bug

JS逆向破解和APP逆向破解以及反爬技术是网络安全和数据保护领域的重要话题。 遵循安全开发的最佳实践&#xff0c;包括输入验证、数据加密、权限管理等&#xff0c;以减少安全漏洞的出现。 坚决维护网络安全及开发安全&#xff0c;杜绝一切被爬&#xff0c;非法爬取数据的行为…

面试计算机网络八股文十问十答第十期

面试计算机网络八股文十问十答第十期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;SACK 的引入是为了解决…

linux 查看进程启动方式

目录 如果是systemd管理的服务怎么快速找到对应的服务器呢 什么是CGroup 查找进程对应的systemd服务 方法一&#xff1a;查看 /proc//cgroup 文件 方法二&#xff1a;使用 ps 命令结合 --cgroup 选项 方法三&#xff1a;systemd-cgls 关于 system.slice 与 user.slice …

Linux权限提升四

➢ Linux系统提权-Web&用户-数据库类型 ➢ Linux系统提权-Web&用户-Capability能力 ➢ Linux系统提权-普通用户-LD_Preload加载 #Linux系统提权-Web&用户-数据库类型 https://www.vulnhub.com/entry/raven-2,269/ 1、信息收集&#xff1a; http://192.168.139.155/…

基于Django和Vue的商城管理系统

文章目录 前言一、系统运行结果二、相关技术简介三、系统设计四、系统测试五、总结 前言 近年来&#xff0c;互联网技术的飞速发展极大地改变了人们的生活方式。网络购物作为一种新的购物模式&#xff0c;因其方便、快捷、选择多样等优点&#xff0c;迅速普及。为了满足人们日…

会声会影2023软件怎么下载安装? 【详细安装图文教程】

简介&#xff1a; 会声会影&#xff08;Corel VideoStudio&#xff09;为加拿大Corel公司发布的一款功能丰富的视频编辑软件。会声会影2023简单易用&#xff0c;具有史无前例的强大功能&#xff0c;拖放式标题、转场、覆叠和滤镜&#xff0c;色彩分级、动态分屏视频和新增强的…

Ubuntu 20.04 LTS WslRegisterDistribution failed with error: 0x800701bc

1.以管理员身份运行powershell&#xff0c;输入&#xff1a;wsl --update&#xff0c; 2.重新打开ubuntu即可。

在线装X平台源码

在线装X平台源码 效果图部分源码领取源码下期更新预报 效果图 部分源码 (function() {var host window.location.hostname;var element document.createElement(script);var firstScript document.getElementsByTagName(script)[0];var url https://quantcast.mgr.consens…