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

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语言初阶必会的练习题&#xff08;3&#xff09; 放在最前面的1、不允许创建临时变量&#xff0c;交换两个整数的内容1.1、分析&#xff1a;见代码注释&#xff08;a&#xff09;方法 1&#xff08;b&#xff09;方法 2 1.2、结果展示方法 1 的 结果&#xff1a;方法 2 的 结果…...

MongoDB面试专题33道解析

大家好&#xff0c;我是 V 哥。今天给大家分享 MongoDB的道 V 哥原创的面试题&#xff0c;收藏起来&#xff0c;一定会对你有帮助。 V 哥推荐&#xff1a;2024 最适合入门的 JAVA 课程 1. 你说的 NoSQL 数据库是什么意思&#xff1f;NoSQL 与 RDBMS 直接有什么区别&#xff1f…...

Laravel 安全实践:如何防止 XSS 攻击

在当今的网络环境中&#xff0c;应用程序的安全性越来越受到开发者和企业的重视。跨站脚本攻击&#xff08;XSS&#xff09;是常见的网络安全威胁之一&#xff0c;它通过在目标网站上注入恶意脚本&#xff0c;窃取用户信息或执行恶意操作。作为流行的 PHP 框架&#xff0c;Lara…...

《Java Web 开发》

一、引言 在当今数字化时代&#xff0c;Web 应用程序已经成为人们生活和工作中不可或缺的一部分。Java Web 开发作为一种广泛应用的技术&#xff0c;以其强大的功能、稳定性和可扩展性&#xff0c;在企业级应用开发中占据着重要地位。本文将深入探讨 Java Web 开发的各个方面&a…...

Vector和ArrayList

Vector和ArrayList都是Java集合框架中的动态数组实现类&#xff0c;它们之间存在一些显著的区别。以下是对Vector和ArrayList的详细比较&#xff1a; 一、线程安全性 Vector&#xff1a;是线程安全的&#xff0c;即多线程情况下&#xff0c;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官方默认分区结构&#xff0c;而迅为另维护了的一套定制分区结构的SDK&#xff0c;两种不同的分区结构都有着各自的特性&#xff0c;RK默认分区镜像和定制分区镜像对比如下所示&#xff1a; rk传统分区适合启动速度要求高且硬件配置固定的系…...

基于Springboot的学生宿舍管理系统的设计与实现-计算机毕设 附源码 26991

基于Springboot的学生宿舍管理系统的设计与实现 摘 要 学生宿舍管理系统在高校管理中具有重要的作用&#xff0c;为提高宿舍管理效率和服务质量&#xff0c;本文基于Springboot框架开发了一款学生宿舍管理系统。该系统主要分为管理员、学生用户和宿管用户三类角色&#xff0c;每…...

Spring Mvc中拦截器Interceptor详解

一、概述 拦截器常用于在请求处理的不同阶段插入自定义逻辑。Spring MVC的拦截器作用是在请求到达控制器之前或之后进行拦截&#xff0c;可以对请求和响应进行一些特定的处理。如&#xff1a; 登录验证&#xff1a;对于需要登录才能访问的网址&#xff0c;使用拦截器可以判断…...

【go从零单排】Strings and Runes 字符串和字符

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 概念 在Go语言中&#xff0c;rune 是一个内置的数据类型&#xff0c;用于表示一个Unicode字符。它实际上是一个别名…...

django Forbidden (403)错误解决方法

存在问题&#xff1a; django提交请求时&#xff0c;报403错误&#xff1b; 解决方案&#xff1a; 在form表单中加{% csrf_token %} <h1>用户登录</h1><form me method"post" ac action"/login/">{% csrf_token %}<input type"t…...

pdmaner连接sqlexpress

别以为sqlserver默认的端口总是1433 案例 有台sqlserver2008 express服务器&#xff0c;刚安装&#xff0c;支持混合模式登录&#xff0c;其它什么配置也没改。 先看用ADO连接 这说明&#xff1a; 案例中sqlserver端口不是1433 &#xff01;&#xff01;&#xff01;ADO连接…...

如果编译不通过,且感觉代码没有问题,大概率就是中文引起的问题

一、如果中文乱码&#xff1a;彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_qt 中文乱码-CSDN博客 二、如果中文正常&#xff0c;编译还是有莫名其妙的问题 1、设置编码为 UTF-8(带BOM)。&#xff08;如果下方没有出现“高级保存选项”&#xff0c;只需要修改一下代码&…...

java反序列化学习之CommonCollections3利用链的学习

一、前言 在前文中&#xff0c;我们学习了Java的类加载过程&#xff0c;类加载器以及Java中加载字节码的一些方法&#xff0c;其中介绍了TemplatesImpl&#xff0c;TemplatesImpl是一个可以加载字节码的类&#xff0c;通过调用其newTransformer()方法&#xff0c;即可执行这段字…...

超详细:Vue入门

Vue(发音为 /vjuː/&#xff0c;类似 view)是近些年比较流行的前端框架之一&#xff0c;和 React、Angular 并称为前端三大框架。其中 Vue 简单易学的特点成为国内主流&#xff0c;很多公司已经把它列为一 个前端开发人员必须要掌握的技术点了。 Vue 简介 Vue2.x官网 Vue3.x …...

基础网络安全知识

1.ctfhub技能树 1.1 Web-SQL注入 Web-SQL注入-整数型 && 字符型 && MySQL结构 参考&#xff1a;5.9.6MySql注入 Web-SQL注入-报错注入 step1: 查库名 ?id1 and extractvalue(1,concat(0x7e,database(),0x7e))-- step2: 查看表名 ?id1 and extractvalue(1…...

大语言模型工作原理笔记

大语言模型工作原理笔记 一、词向量&#xff1a;表示语言的方式 大语言模型使用词向量来表示单词&#xff0c;每个词向量是由一串数字组成的列表&#xff0c;代表词空间中的一个点。词空间中&#xff0c;含义相近的词位置更接近&#xff0c;例如"猫"的词向量会靠近…...

安全工程师入侵加密货币交易所获罪

一名高级安全工程师被判犯有对去中心化加密货币交易所的多次攻击罪&#xff0c;在此过程中窃取了超过 1200 万美元的加密货币。 沙克布艾哈迈德&#xff08;Shakeeb Ahmed&#xff09;被判刑&#xff0c;美国检察官达米安威廉姆斯&#xff08;Damian Williams&#xff09;称其…...

使用Docker-Compose安装redis,rabbitmq,nacos,mysql,nginx,tomcat,portainer组件教程

因为开发经常会用到一些组件&#xff0c;又不想在本地启动&#xff0c;所以买了个服务器&#xff0c;然后将这些组件都安装到服务器上以便开发使用。下面就记录下使用docker-compose安装组件的教程以及一些需要注意的地方。 关于docker和docker-compose的安装在另一篇博客中有…...

lora训练模型 打造个人IP

准备工作 下载秋叶炼丹器整理自己的照片下载底膜 https://rentry.org/lycoris-experiments 实操步骤 解压整合包 lora-scripts,先点击“更新” 训练图片收集 比如要训练一个自己头像的模型&#xff0c;就可以拍一些自己的照片&#xff08;20-50张&#xff0c;最少15张&…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...