C语言初阶必会的练习题(3)之位操作符(^ 、、>>等)的应用
C语言初阶必会的练习题(3)
- 放在最前面的
- 1、不允许创建临时变量,交换两个整数的内容
- 1.1、分析:见代码注释
- (a)方法 1
- (b)方法 2
- 1.2、结果展示
- 方法 1 的 结果:
- 方法 2 的 结果:
- 2、统计二进制中1的个数
- 2.1、分析:见代码注释
- (a)方法 1
- (b)方法 2
- 方法 2 的原理图
- (c)方法 3
- 方法 3 的原理图
- 2.2、结果展示
- 方法 1 的 结果:
- 方法 2 的 结果:
- 方法 3 的 结果:
- 3、打印整数二进制的奇数位和偶数位
- 3.1、分析:见代码注释
- 3.2、结果展示
- 展示 1
- 展示 2
- 4、求两个数 二进制中不同位的个数
- 4.1、分析:见代码注释
- 4.2、结果展示
- END
放在最前面的
🎈🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼
🎉🎉我的C语言初阶合集:C语言初阶合集,希望能帮到你!!!😍 😍
👋🏼🎉🎊创作不易,欢迎大家留言、点赞加收藏!!! 🥳😁😍

1、不允许创建临时变量,交换两个整数的内容
1.1、分析:见代码注释
(a)方法 1
//(方法 1):可以使用加减法,然后实现两个数字的互换 #include<stdio.h>//方法1
int main()
{//定义两个整型变量 a、bint a = 0;int b = 0;//输入scanf("%d %d", &a, &b);//定义一个整型变量 sumint sum = 0;//将 a + b的值赋值给 sumsum = a + b;//进行加减法操作,实现两个数字 的交换a = sum - a;//即 a = a + b - a = bb = sum - a ;//即 b = a + b - b = a//输出printf("%d %d\n", a, b);return 0;
}
(b)方法 2
补充 ( ^ 按位异或操作符) 的使用:
对 按位异或操作符 ( ^ )还感到一头雾水的小伙伴们,快来点击下面的这篇超实用博客文章👇,一起揭开它的神秘面纱吧!🔍✨
C语言中操作符详解(上)
方法2的原理图:
-
图片 1

-
图片 2

-
图片 3

-
图片 4

//(方法2):可以使用位操作符(^ -- 按位异或) #include<stdio.h>int main()
{//定义三个整型变量 a、b、cint a = 0;int b = 0;int c = 0;//输入scanf("%d %d", &a, &b);//使用位操作符(^ -- 按位异或),实现两个数字 的交换c = a ^ b;b = c ^ b;a = c ^ a;//输出printf("%d %d\n", a, b);return 0;
}
1.2、结果展示
输入两个数字: - 5 和 10
方法 1 的 结果:

方法 2 的 结果:

2、统计二进制中1的个数
描述:
写一个函数返回参数二进制中 1 的个数。
比如: 15
二进制位:0000 1111
有4 个 1
2.1、分析:见代码注释
(a)方法 1
//统计二进制中1的个数
//
//首先我们先把问题拆分成我们熟悉的问题
//(1)要得到二进制数的每一位
//(2)进行统计 二进制数字 1 的个数
//
//(1)要得到二进制数的每一位
//类比 输出十进制的每一位是
// (i) % 10
// (ii) / 10
//
//(2)进行统计 二进制数字 1 的个数
//在得到每一位的数字时候,判断是否为 1
//是 1 则 计数器加 1,反之,则不进入 if 语句 #include<stdio.h>//定义一个 NumberOf1 函数,返回类型是 int,
//参数是 unsigned int(无符号整型) n
int NumberOf1(unsigned int n)
{//定义一个计数器int count = 0;// while 循环while (n != 0){//判断 n % 2 的结果是否等于 1if ((n % 2) == 1){//如果是,则 count + 1count++;}// 将 n / 2 赋值给 nn = n / 2;}//返回 countreturn count;
}int main()
{//定义int n = 0;//输入scanf("%d", &n);//调用函数,用于输出数字的每一位,并统计 1 的个数int ret = NumberOf1(n);//输出printf("%d", ret);return 0;
}
(b)方法 2
补充:
嘿小伙伴们!👋🏼 如果有人对C语言里 按位与(&)操作符📜 还感到一头雾水🤯,别急!😌 点击下面的链接🔗,让我们一起复习一下,
把这些让人头疼的概念搞定吧!💪💡
C语言中操作符详解(上)
方法 2 的原理图

#include<stdio.h>int NumberOf1(int n)
{//定义一个计数器int count = 0;//定义一个整型变量 iint i = 0;// for 循环 for (i = 0; i < 32; i++){// if 条件判断语句// 判断是条件是 (n >> i) -- n 右移 i 位// 与 1 进行相与(对应的二进制序列 有 0 则是 0,两个同时为 1 才为 1)// 的结果是否 等于 1if (((n >> i) & 1) == 1){//如果是,则 count+1count++;}}//返回 countreturn count;
}int main()
{//定义int n = 0;//输入scanf("%d", &n);//调用函数,并统计 1 的个数int ret = NumberOf1(n);//输出printf("%d", ret);return 0;
}
(c)方法 3
方法 3 的原理图

int NumberOf1(int n)
{//定义一个计数器int count = 0;// while 循环while (n != 0){//进入循环即 n != 0,则 count + 1count++;// 将 n 和 (n - 1) 进行 相与(对应的二进制序列 有0 则是 0,两个同时为 1 才为1)// 并将结果 赋值给 nn = n & (n - 1);}//返回 countreturn count;
}int main()
{//定义int n = 0;//输入scanf("%d", &n);//调用函数,并统计 1 的个数int ret = NumberOf1(n);//输出printf("%d", ret);return 0;
}
2.2、结果展示
方法 1 的 结果:

方法 2 的 结果:

方法 3 的 结果:

3、打印整数二进制的奇数位和偶数位
描述:
获取一个整数二进制序列中所有的偶数位和奇数位,
分别打印出二进制序列
3.1、分析:见代码注释
- 思路展示:

void Print(int n)
{//定义一个整型变量 iint i = 0;//打印提示信息printf("奇数位:");// for 循环 for (i = 30; i >= 0; i -= 2){printf("%d ", (n >> i) & 1);}//打印提示信息printf("\n偶数位:");// for 循环 for (i = 31; i >= 1; i -= 2){printf("%d ", (n >> i) & 1);}
}int main()
{//定义int n = 0;//输入scanf("%d", &n);//调用函数,用于打印整数二进制的奇数位和偶数位Print(n);return 0;
}
3.2、结果展示
展示 1
-
输入数字 1
-
数字1 在32位机器上的二进制序列

-
VS输出结果图片展示

展示 2
-
输入数字 10
-
数字10 在32位机器上的二进制序列

-
VS输出结果图片展示

4、求两个数 二进制中不同位的个数
描述:
编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子: 1999 2299
输出例子:7
4.1、分析:见代码注释
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main()
{//定义两个整型变量 a、bint a = 0;int b = 0;//输入scanf("%d %d", &a, &b);//定义一个整型变量 iint i = 0;//定义一个整型变量 count,用作计数器int count = 0;// for 循环for (i = 0; i < 32; i++){// if 条件语句// 判断条件是 a 和 b 的每一位(右移 i 位操作)分别与 1 进行 // 按位与(对应的二进制序列,数字同时为 1才为 1,有 0 则为 0)// 即得到 a 和 b 的二进制序列的每一位进行 一 一 比较if (((a >> i) & 1) != ((b >> i) & 1)){//计数器 count 加 1count++;}}//输出printf("%d\n", count);return 0;
}
4.2、结果展示
输入例子: 1999 2299
输出例子: 7

END
每天都在学习的路上!
On The Way Of Learning
“亲爱的读者们,文章到这里就结束啦😃。在阅读过程中有没有遇到什么疑问等等❓欢迎在评论区留言告诉我哦,期待与你的互动交流🤗!”

相关文章:
C语言初阶必会的练习题(3)之位操作符(^ 、、>>等)的应用
C语言初阶必会的练习题(3) 放在最前面的1、不允许创建临时变量,交换两个整数的内容1.1、分析:见代码注释(a)方法 1(b)方法 2 1.2、结果展示方法 1 的 结果:方法 2 的 结果…...
MongoDB面试专题33道解析
大家好,我是 V 哥。今天给大家分享 MongoDB的道 V 哥原创的面试题,收藏起来,一定会对你有帮助。 V 哥推荐:2024 最适合入门的 JAVA 课程 1. 你说的 NoSQL 数据库是什么意思?NoSQL 与 RDBMS 直接有什么区别?…...
Laravel 安全实践:如何防止 XSS 攻击
在当今的网络环境中,应用程序的安全性越来越受到开发者和企业的重视。跨站脚本攻击(XSS)是常见的网络安全威胁之一,它通过在目标网站上注入恶意脚本,窃取用户信息或执行恶意操作。作为流行的 PHP 框架,Lara…...
《Java Web 开发》
一、引言 在当今数字化时代,Web 应用程序已经成为人们生活和工作中不可或缺的一部分。Java Web 开发作为一种广泛应用的技术,以其强大的功能、稳定性和可扩展性,在企业级应用开发中占据着重要地位。本文将深入探讨 Java Web 开发的各个方面&a…...
Vector和ArrayList
Vector和ArrayList都是Java集合框架中的动态数组实现类,它们之间存在一些显著的区别。以下是对Vector和ArrayList的详细比较: 一、线程安全性 Vector:是线程安全的,即多线程情况下,Vector可以保证容器的同步性。Vect…...
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
文章目录 1. sizeof 和 strlen1.1 sizeof1.2 strlen 2. 数组和指针结合的试题深入解析2.1 一维数组2.2 字符数组代码1代码2代码3代码4代码5代码6 2.3 二维数组 3.指针运算的试题深入解析题1题2题3题4题5题6题7 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…...
开发更便利!迅为RK3568/RK3588 定制分区镜像发布
目前迅为所维护的Linux SDK一直延续RK官方默认分区结构,而迅为另维护了的一套定制分区结构的SDK,两种不同的分区结构都有着各自的特性,RK默认分区镜像和定制分区镜像对比如下所示: rk传统分区适合启动速度要求高且硬件配置固定的系…...
基于Springboot的学生宿舍管理系统的设计与实现-计算机毕设 附源码 26991
基于Springboot的学生宿舍管理系统的设计与实现 摘 要 学生宿舍管理系统在高校管理中具有重要的作用,为提高宿舍管理效率和服务质量,本文基于Springboot框架开发了一款学生宿舍管理系统。该系统主要分为管理员、学生用户和宿管用户三类角色,每…...
Spring Mvc中拦截器Interceptor详解
一、概述 拦截器常用于在请求处理的不同阶段插入自定义逻辑。Spring MVC的拦截器作用是在请求到达控制器之前或之后进行拦截,可以对请求和响应进行一些特定的处理。如: 登录验证:对于需要登录才能访问的网址,使用拦截器可以判断…...
【go从零单排】Strings and Runes 字符串和字符
Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 概念 在Go语言中,rune 是一个内置的数据类型,用于表示一个Unicode字符。它实际上是一个别名…...
django Forbidden (403)错误解决方法
存在问题: django提交请求时,报403错误; 解决方案: 在form表单中加{% csrf_token %} <h1>用户登录</h1><form me method"post" ac action"/login/">{% csrf_token %}<input type"t…...
pdmaner连接sqlexpress
别以为sqlserver默认的端口总是1433 案例 有台sqlserver2008 express服务器,刚安装,支持混合模式登录,其它什么配置也没改。 先看用ADO连接 这说明: 案例中sqlserver端口不是1433 !!!ADO连接…...
如果编译不通过,且感觉代码没有问题,大概率就是中文引起的问题
一、如果中文乱码:彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_qt 中文乱码-CSDN博客 二、如果中文正常,编译还是有莫名其妙的问题 1、设置编码为 UTF-8(带BOM)。(如果下方没有出现“高级保存选项”,只需要修改一下代码&…...
java反序列化学习之CommonCollections3利用链的学习
一、前言 在前文中,我们学习了Java的类加载过程,类加载器以及Java中加载字节码的一些方法,其中介绍了TemplatesImpl,TemplatesImpl是一个可以加载字节码的类,通过调用其newTransformer()方法,即可执行这段字…...
超详细:Vue入门
Vue(发音为 /vjuː/,类似 view)是近些年比较流行的前端框架之一,和 React、Angular 并称为前端三大框架。其中 Vue 简单易学的特点成为国内主流,很多公司已经把它列为一 个前端开发人员必须要掌握的技术点了。 Vue 简介 Vue2.x官网 Vue3.x …...
基础网络安全知识
1.ctfhub技能树 1.1 Web-SQL注入 Web-SQL注入-整数型 && 字符型 && MySQL结构 参考:5.9.6MySql注入 Web-SQL注入-报错注入 step1: 查库名 ?id1 and extractvalue(1,concat(0x7e,database(),0x7e))-- step2: 查看表名 ?id1 and extractvalue(1…...
大语言模型工作原理笔记
大语言模型工作原理笔记 一、词向量:表示语言的方式 大语言模型使用词向量来表示单词,每个词向量是由一串数字组成的列表,代表词空间中的一个点。词空间中,含义相近的词位置更接近,例如"猫"的词向量会靠近…...
安全工程师入侵加密货币交易所获罪
一名高级安全工程师被判犯有对去中心化加密货币交易所的多次攻击罪,在此过程中窃取了超过 1200 万美元的加密货币。 沙克布艾哈迈德(Shakeeb Ahmed)被判刑,美国检察官达米安威廉姆斯(Damian Williams)称其…...
使用Docker-Compose安装redis,rabbitmq,nacos,mysql,nginx,tomcat,portainer组件教程
因为开发经常会用到一些组件,又不想在本地启动,所以买了个服务器,然后将这些组件都安装到服务器上以便开发使用。下面就记录下使用docker-compose安装组件的教程以及一些需要注意的地方。 关于docker和docker-compose的安装在另一篇博客中有…...
lora训练模型 打造个人IP
准备工作 下载秋叶炼丹器整理自己的照片下载底膜 https://rentry.org/lycoris-experiments 实操步骤 解压整合包 lora-scripts,先点击“更新” 训练图片收集 比如要训练一个自己头像的模型,就可以拍一些自己的照片(20-50张,最少15张&…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
