C语言——位运算

news2024/11/15 11:00:12

一、位运算符和位运算

        C语言提供如下表所列出的位运算符:

 说明:
         (1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。
         (2)运算量只能是整型或字符型的数据,不能为实型数据。

1、“按位与”运算符(&)

         参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1, 则该位的结果值为1;否则为0。

按位与有一些特殊的用途:
         (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要找一个二进制数, 来的数中为1的位,新数中相应位为0。然后使二者进行& 其中各个位符合以下条件: 运算,即可达到清零目的。

        (2)取一个数中某些指定位。如有一个整数a(2个字节),想要其中的低字节。只需将a与(377)。按位与即可。

         (3)要想将哪一位保留下来,就与一个数进行&运算,此数在该位取1。

2、“按位或”运算符(|)

        两个相应的二进制位中只要有一个为1,该位的结果值为1。即0|0 = 0,0|1 = 1,1|0 = 1,1|1 =1。

3、“异或”运算符(^)

         异或运算符^也称XOR运算符。它的规则是:若参加运算的两个二进制位同号,则
 结果为0(假);异号则为1(真)。即0^0=0,0^1=1,1^0=1,1^1=0。

 下面举例说明^运算符的应用:
         (1)使特定位翻转

         (2)与0相^,保留原值

         (3)交换两个值,不用临时变量

4、“取反”运算符(~)

         ~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。例 如,~025是对八进制数25(即二进制数00010101)按位求反。

5、左移运算符(<<)

         用来将一个数的各二进制位全部左移若干位。 高位左移后溢出,舍弃。

6、右移运算符(>>)

         a>>2表示将a的各二进制位右移2位,移到右端的低位被舍弃,对无符号数,高位
 补0。 

        右移一位相当于除以2,右移n位相当于除以2^n。

         在右移时,需要注意符号位问题。对无符号数,右移时左边高位移入0;对于有符号 的值,如果原来符号位为0(该数为正),则左边也是移入0,如同上例表示的那样。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的系统移入1。移入0的称为“逻辑右移”,即简单右移;移入1的称为“算术右 移”。

7、位运算赋值运算符

         位运算符与赋值运算符可以组成复合赋值运算符,例如: &=,|=,>>=, <<=,^=等。

8、不同长度的数据进行位运算

         如果两个数据长度不同(例如long型和int型)进行位运算时(如a &b,而a为long 型,b为int型),系统会将二者按右端对齐。如果b为正数,则左侧16位补满0;若b为负 数,左端应补满1;如果b为无符号整数型,则左侧添满0。

二、位段

         以前曾介绍过对内存中信息的存取一般以字节为单位。实际上,有时存储一个信息不必用一个或多个字节。 例如,“真”或“假”用 0或1表示,只需1位即可。

        可以用以下两种方法向一个字节中的一个或几个二进制位赋值和改变它的值:
                (1)、可以人为地将一个整型变量data分为几部分。

                 (2)位段
                 C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位 的成员称为“位段”或称“位域”(bit field)。利用位段能够用较少的位数存储数据。

 关于位段的定义和引用,有几点要说明:
         (1)位段成员的类型必须指定为unsigned或int类型。
         (2)若某一位段要从另 个字开始存放,可以用以下 式定义:
         unsigned a:1;(一个存储单元) unsigned b:2; (一个存储单元)unsigned :0; unsigned c:3;(另一存储单元)

         (3)一个位段必须存储在同一存储单元中,不能跨两个单元。 如果第一个单元空间不能容纳下一个位段则该空间不用,而从下一个单元起存放该位段。
       (4)、可以定义无名位段。

         大于存储单元的长度,也不能定义 (5)位段的长度不能大于存储单元的长度,也不能定义位段数组。
         (6)位段可以用整型格式符输出。

         (7)位段可以在数值表达式中引用,它会被系统自动地转换成整型数。例如data.a+5/data.b 是合法的。

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

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

相关文章

简单的docker学习 第4章 docker容器

第4章 Docker容器 4.1 容器基础 4.1.1 容器启动流程 通过 docker run 命令可以启动运行一个容器。该命令在执行时首先会在本地查找指定的镜像&#xff0c;如果找到了&#xff0c;则直接启动&#xff0c;否则会到镜像中心查找。如果镜像中心存在该镜像&#xff0c;则会下载到…

读零信任网络:在不可信网络中构建安全系统10认证身份

1. 用户所知道的信息 1.1. 只有用户本人知道的信息 1.2. 密码 1.2.1. 密码是常用的认证机制 1.2.2. 密码验证就是确认用户“所知”性的较好途径 1.2.3. 用户可以利用密码管理器来便捷地管理多个高强度密码&#xff0c;从而有效降低数据泄露风险 1.2.4. 长度足够长 1.2.4.1…

Docker数据管理,数据卷,容器服务器数据卷

一、容器的数据管理介绍 1.1 Docker容器分层 Docker镜像由多个只读层叠加而成&#xff0c;启动容器时&#xff0c;Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已经存在的文件&#xff0c;那该文件将会从读写层下面的只读层复制到…

GroupMamba实战:使用GroupMamba实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图,完工时间:,延期,机器负载,机器能耗。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &a…

Stack Overflow2024年度调查:76%的程序员正在或计划使用AI工具!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 1. 最受…

零售EDI:OBI欧倍德EDI项目案例

OBI欧倍德公司是德国建材和家居装饰零售连锁店&#xff0c;在德国以及其他欧洲国家拥有众多分店&#xff0c;是欧洲领先的DIY&#xff08;Do It Yourself&#xff09;零售商之一。为了更好地处理与全球供应商之间的业务数据往来&#xff0c;OBI采用EDI提高其供应链的自动化水平…

继承(一)

概念&#xff1a;继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的层次结构&#xff0c…

基于Verilog HDL的FPGA开发入门

在电子设计自动化领域&#xff0c;FPGA&#xff08;现场可编程门阵列&#xff09;是一种强大的工具&#xff0c;它允许设计者在硬件层面上实现自定义的逻辑电路。Verilog HDL&#xff08;硬件描述语言&#xff09;是描述FPGA设计的主要语言之一&#xff0c;以其简洁性和强大的功…

工具收集 - tinytask(相当于迷你的按键精灵)

工具收集 - tinytask&#xff08;相当于迷你的按键精灵&#xff09; 简介首页 简介 TinyTask 是一款极简主义的 PC 自动化应用程序&#xff0c;您可以用它来记录和重复操作。顾名思义&#xff0c;它小得令人难以置信&#xff08;仅 36KB&#xff01;&#xff09;&#xff0c;极…

调度系统之Oozie

Apache Oozie 是一个工作流调度系统&#xff0c;专门设计用于管理在 Apache Hadoop 平台上运行的工作流。Oozie 提供了丰富的功能&#xff0c;使得大规模数据处理任务的调度和管理变得更加高效和灵活。以下是对 Oozie 的详细介绍&#xff1a; 核心功能 1. 工作流管理 Oozie 允…

营养学基础

目录 一&#xff0c;指标概念 二&#xff0c;中国居民膳食矿物质 三&#xff0c;婴儿奶粉矿物质计算 1&#xff0c;冲奶粉 2&#xff0c;奶粉营养表 3&#xff0c;计算示例 一&#xff0c;指标概念 简单来说&#xff0c;UL是上限&#xff0c;其他3个是推荐值。 RNI的可信…

牛客JS题(二十四)验证是否是身份证

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 正则表达式一代与二代身份证判断 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><style>/* 填写样式 */</style></head><…

【旧数字组合新数字】有1,2,3,4个数字,求能组成多少个互不相同且无重复数字的三位数,都是多少

有1&#xff0c;2&#xff0c;3&#xff0c;4个数字&#xff0c;求能组成多少个互不相同且无重复数字的三位数&#xff0c;都是多少&#xff0c;使用C语言实现 具体代码&#xff1a; #include<stdio.h>int main(){int i,j,n;for(i1;i<5;i){for(j1;j<5;j){for(n1;…

消灭星星游戏程序设计【连载十】——小星星的残影轨迹

消灭星星游戏程序设计【连载十】——小星星的残影轨迹 大家每次都可以在页面中下载本节内容的实现代码&#xff0c;一步一步从简单开始&#xff0c;逐步完成游戏的各种功能&#xff0c;如果大家有任何问题也欢迎留言交流。 游戏整体效果展示&#xff1a; 1、本节要达到的效果 …

【Mind+】掌控板入门教程05 心情灯

大自然的各种色彩使人产生各种感觉&#xff0c;心理学家认为&#xff0c;不同的颜色会让人产生不同的情绪。比如&#xff0c;红色通常给人刺激、热情和幸福的感觉&#xff0c;而绿色作为自然界中草原和森林的颜色&#xff0c;给人以理想、年轻、新鲜的感觉&#xff0c;蓝色则让…

MediaHub中的卡片实现进展汇报

今天刚从家赶到北京&#xff0c;北京和内蒙的温度差别真的太大了。给大家简单汇报一下目前MediaHub的进展&#xff1a; 上节卡片需求我们分析了gamma中卡片的设计&#xff0c;经过几天的开发以及前期的积累&#xff0c;开发进度超预期&#xff0c;功能基本上已经开发完成&#…

认识Mybatis和搭建Mybatis初始环境(Java)

首先我们需要知道在Java中连接数据库的底层就是JDBC&#xff0c;但是JDBC存在诸多弊端&#xff0c;如硬编码&#xff0c;代码重复度高&#xff0c;SQL参数固定&#xff0c;属于底层技术&#xff0c;结果集映射麻烦等。为了解决这些弊端&#xff0c;官方为我们提供了一些ORM模型…

基于大数据的混合音乐推荐系统的设计与设计(论文+源码)_kaic

摘 要 随着数据的不断增长和用户对随听随播的收听方式的习惯&#xff0c;开发一款音乐推荐系统变得越来越必要。为了满足这一需求&#xff0c;本论文采用Java语言、Vue以及数据库MySQL进行开发。系统的主要功能包括登录注册、音乐分类管理、音乐推荐管理、音乐资讯管理、音乐库…

Nacos-2.4.0最新版本,postgresql插件适配器修改分享

1. 背景 自前段时间&#xff0c;发表的一篇博文“Nacos-2.4.0最新版本docker镜像&#xff0c;兼容postgresql最新版本17和16” 有网友在评论区叫我出个修改源码的过程&#xff0c;今天就给大家简单分享一下关于“Nacos最新版&#xff08;2.4.0&#xff09;的postgresql插件适…