当前位置: 首页 > news >正文

【C语言】位操作符与移位操作符练习

目录

前言:

1.一道变态的面试题

2.输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。

方法一:

方法二:

方法三:

3.打印整数二进制的奇数位和偶数位


前言:

前篇我们学习过C语言的位与移位操作符详解【C语言】位与移位操作符详解-CSDN博客

这篇博客将带领大家继续练习相关知识。

1.一道变态的面试题

不允许创建临时变量,交换两个整数的内容。

解析:通过上节我们学习的位与移位操作符,我们可以大概知道需要用到它们。

通过学习我们可知:

①a & a = a ②a | a = a ③a ^ a = 0 ④a & 0 = 0 ⑤a | 0 = a ⑥a ^ 0 = a

要交换两个整数的内容我们要使用③⑥两个公式

a^a^b=b

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
//不允许创建临时变量,交换两个整数的内容
#include<stdio.h>
int main()
{int a = 3;int b = 5;a = a ^ b;b = a ^ b;//实际上是a^b^b=a^0=aa = a ^ b;//实际上是a^b^a=0^b=bprintf("%d\n", a);printf("%d\n", b);return 0;
}

 运行结果如下:

2.输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。

方法一:

解析:我们知道按位与是同真为真也就是二进制中都是1才为1,只要有一个不为1就是0;

所以如果我们将n按位与1(1的二进制除了最后一位其他都是0),那么我们就可以知道n最后一位是1还是0了,如果再通过右移操作符将n的二进制一回移动一个,那么我们就可以得知n每位是1还是0了,问题就得到解决啦~

🎉🎉✨检测num中某一位是0还是1的方式:

1.将num向右移动i位

2.将移完位之后的结果与1按位与,如果.结果是0,则第i个比特位是0,结果是非0,则第i个比特位是1

以下是解析图:

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>//2.输入一个整数 n ,输出该数32位二进制表示中1的个数。
// 其中负数用补码表示。
int main()
{int n = 0;printf("请输入整数n:");scanf("%d", &n);int i = 0;//创建i变量用以循环32次int count = 0;//创建count变量用以记录i的个数for (i = 0; i < 32; i++){count += (n>>i) & 1;}printf("\n%d的二进制中1的个数为:%d\n",n,count);return 0;
}

运行结果如下:

 

方法一

优点:用位操作代替取模和除法运算,效率稍微比较高

缺陷:不论是什么数据,循环都要执行32次 

方法二:

代码如下: 

int main()
{int n = 0;printf("请输入整数n:");scanf("%d", &n);int count = 0;//创建变量计数while (n & (n - 1))//当n与相邻位按位与不为0时{n = n & (n - 1);count++;}count += 1;//注意最后为0的也要算进去printf("\n二进制中1的个数为:%d\n",  count);return 0;
}

这里要注意两点💥:

(1)n&(n-1)后要将它的值赋给n,而不是将n-1赋给n;

n = n & (n - 1);

(2)最后n&(n-1) = 0时while已经出了循环,所以最后count还要+1; 

count += 1;//注意最后为0的也要算进去

代码运行结果如下: 

方法三:

代码如下:

int main()
{int n = 0;printf("请输入整数n:");scanf("%d", &n);int count = 0;//创建变量计数while (n){if (n % 2 == 1)count++;n =n/ 2;}printf("\n二进制中1的个数为:%d\n", count);
}

运行结果如下:

上述方法缺陷:进行了大量的取模以及除法运算,取模和除法运算的效率本来就比较低。 

3.打印整数二进制的奇数位和偶数位

思路:
1.提取所有的奇数位,如果该位是1,输出1,是0则输出0

2.以同样的方式提取偶数位置(我们可以用移位操作符来提取)


💫检测num中某一位是0还是1的方式:

1.将num向右移动i位

2.将移完位之后的结果与1按位与,如果.结果是0,则第i个比特位是0,结果是非0,则第i个比特位是1

代码如下:

int main()
{int num = 0;printf("请输入整数num:");scanf("%d", &num);for (int i = 31; i >= 1; i -= 2){printf("%d ", (num >> i) & 1);}printf("\n");for (int i = 30; i >= 0; i -= 2){printf("%d ", (num >> i) & 1);}printf("\n");return 0;
}

运行结果如下:

相关文章:

【C语言】位操作符与移位操作符练习

目录 前言&#xff1a; 1.一道变态的面试题 2.输入一个整数 n &#xff0c;输出该数32位二进制表示中1的个数。其中负数用补码表示。 方法一&#xff1a; 方法二&#xff1a; 方法三&#xff1a; 3.打印整数二进制的奇数位和偶数位 前言&#xff1a; 前篇我们学习过C语言…...

第十四届“中关村青联杯”全国研究生数学建模竞赛-A题:无人机在抢险救灾中的优化运用

目录 摘 要: 1 问题重述 1.1 问题背景 1.2 待解决的问题 2 模型假设及符号说明...

Android 9.0 Launcher3桌面显示多个相同app图标的解决办法

1.前言 在9.0的系统ROM定制化开发中,在Launcher3的系统原生桌面中,在显示桌面的时候,在禁用和启用app的功能测试的时候,会发现有多个相同app的图标显示在桌面 这对Launcher3的体验效果不是很好,所以为了优化产品,需要解决这个bug,然后让产品更完善 2.桌面显示多个相同…...

WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?

YIA主题设置中默认有4个广告位&#xff0c;而侧边栏的广告位由站长自行添加。boke112百科在这些广告位添加图片广告后发现图片下方有空白&#xff0c;导致下方的两个角没有变圆角&#xff0c;看起来也有点不好看。具体如下图所示&#xff1a; 其实&#xff0c;这个问题就是典型…...

5.15 BCC工具之kvm_hypercall.py解读

一,工具简介 在该示例中,我们可以了解到如何使用eBPF(扩展BPF,Berkeley Packet Filter的扩展)和bcc(BPF Compiler Collection)来分析KVM(Kernel-based Virtual Machine)中的超级调用(hypercall)。 即当exit_reason为VMCALL时,有状态的kvm_entry和kvm_exit记录以及…...

git 解除本地分支与其它分支(远程分支)的关联

开发中&#xff0c;我在同事的分支开一条分支&#xff0c;并将同事的分支作为关联分支&#xff0c;前两天还好&#xff0c;我一个人在干活&#xff0c;然而第3天&#xff0c;同事回来了&#xff0c;他在他那条分支也开发&#xff0c;这时就会出现2种情况&#xff0c; 1. 同时修…...

conda 所有的命令及其讲解

Conda 是一个开源的包管理器和环境管理器&#xff0c;可以用于安装、运行和升级跨平台的软件包和环境。Conda 很流行于数据科学、机器学习、科学计算等领域&#xff0c;因为它能够快速地安装、管理和部署软件包和环境。以下是 Conda 的一些主要命令及其简要说明&#xff1a; 环…...

mysql 数据库主从复制搭建

MySQL 主从复制主要用于实现高可用性和备份。在主从复制中&#xff0c;一个 MySQL 实例&#xff08;称为主节点&#xff09;将其数据更改复制到至少一个其他 MySQL 实例&#xff08;称为从节点&#xff09;上。主要借助于数据库二进制日志binlog进行数据的复制。 主从数据库对应…...

小白水平理解面试经典题目LeetCode 1025 Divisor Game【动态规划】

1025 除数游戏 小艾 和 小鲍 轮流玩游戏&#xff0c;小艾首先开始。 最初&#xff0c;黑板上有一个数字 n 。在每个玩家的回合中&#xff0c;该玩家做出的动作包括&#xff1a; 选择任意 x&#xff0c;使 0 < x < n 和 n % x 0 。将黑板上的数字 n 替换为 n - x 。 此…...

基于单片机的智能宠物喂食器设计

摘要:阐述智能宠物喂食器的实现方式,以STC89C52单片机为核心芯片,控制LCD的显示、语音芯片的启动和步进电机的运行。通过按键设置预设时间,当时间到达预设时间时,语音电路发出提示,步进电机工作,提供食物。此系统解决了主人由于各种原因不在家,使得宠物不能按时吃饭的问…...

探索单片机应用领域:从智能家居到工业自动化

单片机作为一种微型计算机芯片&#xff0c;在智能家居和工业自动化领域有着广泛的应用。以下将从智能家居和工业自动化两个方面分点论述单片机的应用。 智能家居领域&#xff1a; 1. 智能灯光控制&#xff1a; 单片机可以用于控制智能灯光系统&#xff0c;实现灯光的远程控制…...

Nginx介绍和使用

Nginx是一个高性能的HTTP和反向代理web服务器&#xff0c;其使用方法包括安装、配置以及与其他软件的配合使用。 Nginx被广泛认为是一个轻量级、占用资源少、并发处理能力强大的web服务器软件。它不仅可以作为HTTP服务器提供静态内容服务&#xff0c;还可以作为反向代理服务器…...

异步编程——CompletableFuture用法详解

文章目录 前言1. Future 线程池2. 什么是CompletableFuture 前言 我们异步执行一个任务时&#xff0c;需要用线程池Executor去创建&#xff0c;有两种方式&#xff1a; 如果不需要有返回值&#xff0c; 任务继承Thread类或实现Runnable接口&#xff1b;如果需要有返回值&…...

Linux常用命令(不断更新)

cd 切换目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 pwd 显示工作路径 ls -l 显示文件和目录的详细信息 ls -a 列出全部文件 ls -R 连同子目录的内容一起列出 ls -lh 显示权限 cp 复制 mv 移动 rm 删除 cat 查看文件内容 find 文件搜索 文件权限 …...

C++ 浮点数二分 数的三次方根

给定一个浮点数 n &#xff0c;求它的三次方根。 输入格式 共一行&#xff0c;包含一个浮点数 n 。 输出格式 共一行&#xff0c;包含一个浮点数&#xff0c;表示问题的解。 注意&#xff0c;结果保留 6 位小数。 数据范围 −10000≤n≤10000 输入样例&#xff1a; 1000.00…...

辽宁博学优晨教育科技有限公司视频剪辑培训专业之选

随着数字时代的到来&#xff0c;视频剪辑技术已成为各行各业不可或缺的一项技能。为了满足市场需求&#xff0c;辽宁博学优晨教育科技有限公司&#xff08;以下简称“博学优晨”&#xff09;推出了专业的视频剪辑培训课程&#xff0c;旨在为广大学员提供系统、高效的学习机会。…...

数据转换成json格式

// List<SpinfokuZD> xm GetmoreSpinfoku(id); // return JsonConvert.SerializeObject(xm); //将数据转换成json格式 return JsonConvert.SerializeObject(ds); //将数据转换成json格式 spcgjlZD spselld JsonConvert.Deseriali…...

css3的var()函数

css3的var()函数 变量要以两个连字符--(横杆)(减号)为开头 变量可以在:root{}中定义, :root可以在css中创建全局样式变量。通过 :root本身写的样式&#xff0c;相当于 html&#xff0c;但优先级比后者高。 在CSS3中&#xff0c;var()函数是一个用于插入CSS自定义属性&#xff…...

武汉灰京文化展望未来游戏产业,科技创新引领全面升级的游戏体验

随着科技的迅速发展&#xff0c;未来游戏产业的发展将迎来一个全新的纪元。科技创新将引领游戏体验的全面升级&#xff0c;让玩家不再仅仅是通过屏幕与游戏互动&#xff0c;而是能够亲身感受到游戏世界的存在。这种全新的游戏体验将推动游戏产业不断突破创新&#xff0c;吸引更…...

SOLIDWORKS Visualize 界面介绍

现在有越来越多的朋友在工作中选择使用SOLIDWORKS Visualize正版软件&#xff0c;这真是太棒了!这次的主题是小索带大家了解SOLIDWORKS Visualize界面&#xff0c;让更多的朋友快速的熟悉SOLIDWORKS Visualize界面。 【菜单栏】位于界面的顶端&#xff0c;菜单栏包含多个下拉菜…...

水纹真实度提升300%的关键技巧,深度拆解--style raw、--chaos 45与自定义tile texture协同机制

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;水纹真实度提升300%的关键技巧&#xff0c;深度拆解--style raw、--chaos 45与自定义tile texture协同机制 水纹渲染的真实感跃升并非依赖单一参数调优&#xff0c;而是三重机制在纹理生成管线中的精准耦合&am…...

Python、BMA-Stacking融合LightGBM、GBDT、KNN多模型电商交易欺诈风险预警研究|附代码数据

全文链接&#xff1a;https://tecdat.cn/?p45916原文出处&#xff1a;拓端数据部落公众号封面&#xff1a;关于分析师在此对 Haoyang Ke 对本文所作的贡献表示诚挚感谢。他在浙江财经大学完成了数理统计专业的学习&#xff0c;专注机器学习、数据采集领域。他擅长 Python、R 语…...

Allegro出Gerber避坑指南:关于NC钻孔层(MANUFACTURING/NCLEGEND)丢失的那些事儿

Allegro出Gerber避坑指南&#xff1a;NC钻孔层丢失问题深度解析与实战解决方案 在PCB设计领域&#xff0c;Gerber文件输出是设计到生产的最后一道关键环节。许多经验丰富的设计师都曾遇到过这样的场景&#xff1a;按照标准流程操作&#xff0c;却在最终检查时发现NC钻孔图例层(…...

CANN-昇腾NPU-推理服务高可用-怎么做到99.99%可用性

99% 可用性意味着一年宕机时间 < 53 分钟。推理服务要做到这个指标&#xff0c;需要解决&#xff1a;NPU 故障、OOM、网络中断、版本回滚失败。这篇讲在昇腾NPU上的具体做法。 可用性计算 99.9% 8.76 小时/年 99.99% 52.6 分钟/年 99.999% 5.26 分钟/年99% 是多数在…...

抖音小店搜索排名规则及优化方法

一、抖音商城搜索排名规则1.商品相关性:商品标题、关键词与用户搜索词的匹配程度是重要因素。精准匹配的商品会在搜索结果中更靠前展示。例如&#xff0c;用户搜索"夏季连衣裙”&#xff0c;标题中明确包含该关键词且商品属性也相符的连衣裙&#xff0c;会优先被展示。商品…...

如何永久激活IDM?免费IDM激活脚本终极指南

如何永久激活IDM&#xff1f;免费IDM激活脚本终极指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为IDM试用期到期而烦恼吗&#xff1f;IDM Activation …...

别再让串口中断拖慢你的STM32F407了!手把手教你配置UART4的DMA收发(附完整代码)

STM32F407 UART4 DMA通信实战&#xff1a;突破串口中断的性能瓶颈 如果你正在使用STM32F407的UART4进行数据通信&#xff0c;却频繁遇到系统响应迟缓的问题&#xff0c;很可能是因为传统的串口中断方式正在消耗大量CPU资源。每次收发一个字节都触发中断&#xff0c;当数据量大…...

Autodesk Fusion 360 Linux终极指南:在Ubuntu上运行专业3D建模软件

Autodesk Fusion 360 Linux终极指南&#xff1a;在Ubuntu上运行专业3D建模软件 【免费下载链接】Autodesk-Fusion-360-for-Linux This is a project, where I give you a way to use Autodesk Fusion 360 on Linux! 项目地址: https://gitcode.com/gh_mirrors/au/Autodesk-Fu…...

HACS极速版终极指南:告别智能家居插件下载龟速的完整解决方案

HACS极速版终极指南&#xff1a;告别智能家居插件下载龟速的完整解决方案 【免费下载链接】integration &#x1f1e8;&#x1f1f3; HACS 极速版&#xff0c;无需登陆Github 项目地址: https://gitcode.com/gh_mirrors/int/integration 你是否曾经为了给Home Assistant…...

5大长期记忆系统终极横评!谁是AI Agent的「最强大脑」

&#x1f680; 5大长期记忆系统终极横评&#xff01;谁是AI Agent的「最强大脑」&#xff1f; AI Agent 的「长期记忆」能力&#xff0c;决定了它能否真正拥有"持续学习"和"深度理解"的核心竞争力。 我们耗时数周&#xff0c;对 虾觅 Xiami、AgentMemory…...