c语言-位操作符练习题

文章目录

  • 前言
  • 一、n&(n-1)的运用场景(n为整数)
  • 二、&1 和 >>的应用场景
  • 总结


前言

本篇文章介绍利用c语言的位操作符解决一些练习题,目的是掌握各个位操作符的使用和应用场景。
表1.1为c语言中的位操作符

操作符含义
&按位与
|按位或
^按位异或
~按位取反(包括符合位)
<<左移
>>右移
表1.1 位操作符表

注意:

  1. 位操作符除"~"为单目操作符外,其余均为二目操作符,即有两个操作数
  2. 参加位操作符的对象只能是整型或字符型数据。

一、n&(n-1)的运用场景(n为整数)

题目:求一个整数存储在内存中的二进制位中1的个数(补码中1的个数)

n&(n-1)的过程如下(假设n = 15):
在这里插入图片描述

图1.1 n&(n-1)过程图
不断通过n&(n-1),每一次得到的结果是消去最右边的1;
原理:不断地向左借位,然后利用&操作符消去。 代码实现如下:
int count_2scomplement_3(int num)
{
	int count = 0;
	while (num)
	{
		count++;
		num = num & (num - 1);
	}
	return count;
}

题目:判断一个数是不是2的n次方

这到题依然可以利用n&(n-1)进行解答,如果一个数是2的n次方,则意味只有一个1。如果n&(n-1)的结果为0,那么这个值就是2的n次方。
代码实现如下:

int main()
{
	int num = 0;
	scanf("%d", &num);

	if (0 == (num & (num - 1)))
		printf("%d is 2^n\n", num);
	else
		printf("%d is not 2^n\n",num);

	return 0;
}

题目:两个int(32位)整数的m和n二进制表达式中,有多少个不同的位

这道题的思路是:m与n进行异或运算后,得到m和n的不同位,即1的个数就是不同位的个数,此时,这题又回到了统计1的个数,即第一题的解法。
代码实现如下:

int main()
{
	int m = 0;
	int n = 0;
	int ret = 0;
	scanf("%d %d", &m, &n);
	int a = (m ^ n);
	while(a)
	{
		ret++;
		a = a&(a-1);
	}
	printf("%d", ret);
	return 0;
}

二、&1 和 >>的应用场景

利用&1和>>可以统计一个二进中1或者0的个数;
利用&1和>>也可以获得任意一个位的值。

题目:求一个整数存储在内存中的二进制位中1的个数(补码中1的个数)

利用&1和>>进行解题,代码实现如下:

int count_2scomplement_2(int num)
{
	int count = 0;
	int rightmovetimes = 0;
	for (rightmovetimes = 0; rightmovetimes < 32; rightmovetimes++)
	{
		if ((num >> rightmovetimes) & 1)
		{
			count++;
		}
	}
	return count;
}

num >> rightmovetimes) & 1 == 1,则统计1的个数;为0则统计0的个数。

获取一个整数二进制序列中所有的奇数位和偶数位,分别打印二进制序列
要求:从高位开始打印

这道题的思路依然是利用&1和>>,从高位开始
代码实现如下:

int main()
{
	int num = 0;
	scanf("%d", &num);
	int i = 0;
	//打印奇数位
	for (i = 30; i >= 0; i -=2 )
	{
		printf("%d", (num >> i) & 1);
	}
	printf("\n");
	//打印偶数位
	for (i = 31; i >= 1; i -= 2)
	{
		printf("%d", (num >> i) & 1);
	}
	return 0;
}

总结

本篇文章叙述了n&(n-1)和&1、>>的应用场景。

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

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

相关文章

猪目标检测数据集VOC格式600张

猪是一种常见的哺乳动物&#xff0c;通常被人们认为是肉食动物&#xff0c;但实际上猪是杂食性动物&#xff0c;以植物性食物为主&#xff0c;也有偶尔食肉的习性。猪的体型较大&#xff0c;圆胖的体型和圆润的脸庞使其显得憨态可掬。它们主要通过嗅觉来感知周围环境&#xff0…

【持续更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 &#xff08;1&#xff09;项目可行性分析 &#xff08;2&#xff09;需求描述 &#xff08;3&#xff09;界面原型 &#xff08;4&#xff09;数据库设计 &#xff08;5&#xff09;后端工程 接下来我们使用uniappspringboot实现一个简单的前后端分离的小项目----个…

TinyXml2基础操作大全,tinyxml深度解析,一文精通tinyxml之xml中的操作

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念&#x1f917; 欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2021/12/25&#x1f4c5; 最近更新时…

Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

目录 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 1.2、打包项目&#xff08;jar&#xff09; 1.3、编写 Dockerfile 文件&#xff0c;构建镜像 1.4、运行镜像并测试 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 a&#xff09;简…

手把手教你自己动手使用ONLYOFFICE制作2024年历日记本

手把手教你自己动手使用ONLYOFFICE制作2024年历日记本 又到了岁末年初的时候了&#xff0c;按照自己的习惯&#xff0c;是又该上淘宝买一个年历日记本了&#xff1a; 这也太便宜了吧&#xff01;这里我坚决要把价格打上去&#xff01; 把价格打上去&#xff0c;就是亲自动手制…

NFC物联网智能购物车设计方案

智能购物车是综合利用计算机网络、射频识别技术、数据库技术、单片机于一体的设备具有先进性、便于管理性、经济性、普适性。基于NFC (Near Field Communication&#xff0c;近场通信)技术的智能购物车&#xff0c;能够大幅缩短结账排队时间&#xff0c;实现“无感支付”。NFC是…

【C++】题解:三道只出现一次的数字问题

文章目录 只出现一次的数字i只出现一次的数ii只出现一次的数iii总结 本文介绍了三道只出现一次的数字问题的解法&#xff0c;分别是使用异或运算的方法、使用位运算的方法和使用异或运算和位运算相结合的方法。这三种方法都满足了题目中要求的线性时间复杂度和常数额外空间的条…

【教程】自动检测和安装Python脚本依赖的第三方库

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 背景说明 对于新python环境&#xff0c;要运行某个脚本&#xff0c;可能需要安装很多库&#xff0c;一般可以通过提供的requirements.txt来自动安装。但如果没有这个txt&#xff0c;那就得手动一个一个安装&#…

这一年,熬过许多夜,也有些许收获 | 2023年终总结

大家好&#xff0c;我是小悟 时间如白驹过隙&#xff0c;一如流光匆匆&#xff0c;转瞬即逝。它如同沙漏中的细沙&#xff0c;无声无息地从指间溜走&#xff0c;留给我们无尽的思索。 我们总是无知地忙碌着&#xff0c;而忽略了时间无形的步伐&#xff0c;却发现它已经一去不…

8个plotly绘图技巧

文章目录 什么是Plotlyplolty绘图如何添加标题&#xff0c;及控制标题的颜色和大小&#xff1f;plotly绘图如何自定义x轴和y轴的名称饼图如何同时显示百分比和数值柱状图宽度如何添加注释如何绘制多子图如何添加图例以及控制其颜色、大小、位置等桑基图Python技术资源分享1、Py…

打开3d模型时显示不匹配怎么办---模大狮模型网

当3d模型打开时&#xff0c;显示不匹配的情况可能有以下几个原因和解决方法&#xff1a; 文件格式不匹配&#xff1a;检查您所使用的3D软件是否支持打开该模型文件格式。不同的软件支持不同的文件格式&#xff0c;如果文件格式不匹配&#xff0c;可能无法正确加载和显示模型。尝…

新能源汽车制造设备状态监测:无线温振传感器的应用

随着全球对环境保护的关注度不断增加&#xff0c;新能源汽车的市场需求正在逐步扩大。而为了满足这一需求&#xff0c;新能源汽车制造企业必须依赖高效、可靠的设备来进行生产制造。然而&#xff0c;设备状态的监测与维护对于保证生产线的稳定运行至关重要。无线温振传感器作为…

【JVM篇】Java是如何实现平台无关的?

Java是如何实现平台无关的? ✔️什么是平台无关性✔️平台无关性的实现✔️Java虚拟机✔️字节码✔️Java语言规范 ✔️扩展知识仓✔️平台无关性的好处✔️ 有哪些语言实现了平台无关?✔️Java中基本数据类型的大小都是确定的吗? ✔️什么是平台无关性 平台无关性就是一种语…

dds 问题记录

Q1. 2023.12.29 一个participant内部的数据也会放到topic中进行发布、订阅吗&#xff1f;为什么&#xff1f;如图中的topic3。 (from 车载通信架构 —— DDS协议介绍https://mp.weixin.qq.com/s/IasCCsVJ7w-CHeyXGM6soQ)

Java创建线程执行任务的方法(一)

目录 1.继承Thread类 2.实现Runnab类 2.1实现Runnable类 2.2使用Lambda表达式 3.实现Callable类 3.1返回Integer类型数据 3.2返回String类型数据 3.3返回Object类型数据 4.匿名内部类 创建线程的方法&#xff1a;继承Thread类&#xff1b;实现Runnab类&#xff1b;匿名…

深度解析高防产品---游戏盾

游戏盾是针对游戏行业所推出的高度可定制的网络安全解决方案&#xff0c;游戏盾是高防产品系列中针对游戏行业的安全解决方案。游戏盾专为游戏行业定制&#xff0c;针对性解决游戏行业中复杂的DDoS攻击、游戏CC攻击等问题。游戏盾通过分布式的抗D节点&#xff0c;可以防御TB级大…

归并算法:分治而治的高效算法大揭秘(图文详解)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 归并算法是我们算法中最常见的算法之一&#xff0c;其思想非常巧妙。本身归并是只能归并有序数组…

迁移Ubuntu报错问题

问题描述&#xff1a; 使用LxRunOffline-v3.5.0-mingw迁移Ubuntu至非系统盘时&#xff0c;出现如下报错 ‘Couldn’t set the case sensitive attribute of the directory “\?\C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\Loc…

Typora使用PicGo+Gitee上传图片报错403 Forbidden

Typora使用PicGoGitee上传图片报错403 Forbidden Typora使用PicGoGitee上传图片&#xff0c;上传失败了&#xff0c;错误信息如下 打开PicGo的日志文件查看&#xff0c;可以看到错误详情如下 换了一个插件github-plus重新配置&#xff0c;解决了这个问题 再打开日志查看&…

ubuntu:beyond compare 4 This license key has been revoked 解决办法

https://www.cnblogs.com/zhibei/p/12095431.html 错误如图所示&#xff1a; 解决办法&#xff1a; &#xff08;1&#xff09;先用find命令找到bcompare所在位置&#xff1a;sudo find /home/ -name *bcompare &#xff08;2&#xff09;进入 /home/whf/.config,删除/bco…
最新文章