C语言操作符经典例题

news2024/10/1 19:41:21

一、选择题

1、下面哪个是位操作符:( )

A.&

B.&&

C.||

D.!

答案解析:

答案:A

A正确,&——按(二进制)位与,对应的二进制位:有0则0,两个同时为1才为1。

B、C错误,&&与||——逻辑操作符

D错误,!——单目操作符

知识点:

1、位操作符:

        (1)运算规则:

                ①&——按(2进制)位与,对应的二进制位:有0则0,两个同时为1才为1

                ②|——按(2进制)位或,对应的二进制位:有1则1,两个同时为0才为0

                ③^——按(2进制)位异或,对应的二进制位:相同为0,相异为1

        (2)注意:

                ①他们的操作数必须是整数

                ②是针对二进制位进行运算的

2、逻辑操作符

        (1)运算规则

                ①&&——逻辑与(并且:参与运算的两个逻辑值都为真时,结果为真)

                ②||——逻辑或(或者:参与运算的两个逻辑值都为假时,结果为假)

        (2)逻辑操作符的短路特性

                ①&&操作符,左边为假,右边无需计算

                ②||操作符,左边为真,右边无需计算

        (3)注意区分逻辑与(或)和按位与(或)

                ①逻辑与(或)----->只关注真假

                ②按位与(或)----->通过二进制计算得到

二、编程题

1、交换两个变量(不创建临时变量)

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

方法1:计算得到

方法2:使用按位异或操作符

 

 知识点:

1、按位异或操作符

        (1)运算规则:^——按(二进制)位异或,对应的二进制位:相同为0,相异为1

        (2)性质:

                ①a^a=0

                ②0^a=a

                ③异或支持交换律:a^a^b=a^b^a

         (3)异或操作符交换两个变量的局限性

                ①可读性差

                ②效率也不如使用临时变量的方法

                ③异或只针对整数的交换

代码1:计算得到

#include<stdio.h>

int main()
{
	int a = 0;
	int b = 0;
	//输入a,b
	scanf("%d %d", &a, &b);
	//打印交换前a,b
	printf("交换前:a=%d b=%d\n", a, b);
	//交换a,b
	a = a + b;
	b = a - b;
	a = a - b;
	//打印交换后a,b
	printf("交换后:a=%d b=%d\n", a, b);

	return 0;
}

代码2:使用按位异或

#include<stdio.h>

int main()
{
	int a = 0;
	int b = 0;
	//输入a,b
	scanf("%d %d", &a, &b);
	//输出交换前a,b
	printf("交换前:a=%d b=%d\n", a, b);
	//交换a,b
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	//输出交换后a,b
	printf("交换后:a=%d b=%d\n", a, b);

	return 0;
}

2、统计二进制中1的个数

二进制中1的个数__牛客网

1、在网上平台答编程题(如牛客网),有两类:

        ①IO型:从main函数开始写,要写输入、计算、输出等

        ②接口型:不需要写主函数,默认主函数就是存在的(后台存在),你只需要完成函数就可以了。

本题就是一道接口型。

我们平时练习可以在自己的编译器,先实现再复制粘贴到答题平台上验证。

代码1:

我们是怎么得到10进制整数的每一位的?

类比:

  这种方法虽然也能求出2进制中1的个数,但是我们把题目给的形参改变了,所以不符合题意。排除掉。

#include<stdio.h>

int NumberOf1(unsigned int n) 
{
	int count = 0;//计数器,统计1的个数
	//循环%2 /2,直到n等于0
	while (n)
	{
		if (n % 2 == 1)
		{
			count++;
		}//如果是1,统计
		n /= 2;//循环调整部分
	}
	return count;
}

int main()
{
	int n = 0;
	//输入
	scanf("%d", &n);
	//计算--调用函数
	int ret = NumberOf1(n);
	//输出
	printf("%d\n", ret);

	return 0;
}

代码2:

我们写的这个代码没有修改题目函数的返回类型、函数名、形参所以粘贴复制到牛客网是成功的。

 

知识点:

1、>>右移操作符

        移位规则:

                ①(常见如VS)算术右移:左边补原来的符号位,右边抛弃

                ②逻辑右移:左边直接补0,右边抛弃

2、&——按位与

        移位规则:对应的二进制位:有0则0,两个同时为1才为1

3、总结:我们判断一个数的每一位的数时,通常从低位入手 

4、n虽然发生了右移,但是实际上n在没有被赋值的情况下,自身的值不会发生变化(即n>>i的结果是移位之后的效果,但是n是不变的)

#include<stdio.h>

int NumberOf1(int n)
{
	int count = 0;//计数器,统计1的个数
	int i = 0;//循环变量
	//循环32次,每次右移i
	for (i = 0; i < 32; i++)
	{
		if ((n >> i) & 1)
		{
			count++;
		}
	}
	return count;
}

int main()
{
	int n = 0;
	//输入
	scanf("%d", &n);
	//计算--调用函数
	int ret = NumberOf1(n);
	//输出
	printf("%d\n", ret);

	return 0;
}

代码3:

但是还有效率更高的解法:

我们粘贴函数部分上牛客验证:

  

#include<stdio.h>

int NumberOf1(int n)
{
	int count = 0;//计数器,统计1的个数
	while (n)
	{
		n = n & (n - 1);
		count++;
	}
	return count;
}

int main()
{
	int n = 0;
	//输入
	scanf("%d", &n);
	//计算--调用函数
	int ret = NumberOf1(n);
	//输出
	printf("%d\n", ret);

	return 0;
}

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

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

相关文章

将python代码封装成c版本的dll动态链接库

前言 将python程序打包成DLL文件&#xff0c;然后用C调用生成的DLL文件&#xff0c;这是一种用C调用python的方法&#xff0c;这一块比较容易遇到坑。网上关于这一块的教程不是很多&#xff0c;而且大部分都不能完全解决问题。我在傻傻挣扎了几天之后&#xff0c;终于试出了一个…

第八章认识 Vue.js基础

vue.js 是一套用于构建用户界面的渐进式前端框架 vue.js 核心实现&#xff1a; 相应式的数据绑定&#xff1a;当数据发生改变&#xff0c;视图可以自动更新&#xff0c;不用关心DOM操作&#xff0c;而转型数据库操作 可组合的视图组件&#xff1a;把视图按照功能切分成若干的…

vr电力刀闸事故应急演练实训系统开发

电力事故是在电力生产和输电过程中可能发生的意外事件&#xff0c;它们可能会对人们的生命财产安全造成严重的威胁。因此&#xff0c;电力事故应急演练显得尤为重要。而VR技术则可以为电力事故应急演练提供一种全新的解决方案。 在虚拟环境中&#xff0c;元宇宙VR会模拟各种触电…

07 react+echart+大屏

reactechart大屏大屏ECharts 图表实际步骤React Typescript搭建大屏项目&#xff0c;并实现屏幕适配flexible rem实现适配1. 安装插件对echarts进行的React封装&#xff0c;可以用于React项目中&#xff0c;支持JS、TS如何使用完整例子官网参考大屏 ECharts 图表 ECharts 图…

【Java基础】泛型(二)-泛型的难点:通配符

本文将尝试将通配符和泛型中的继承&#xff0c;多态一并讲解 关于泛型中继承的注意事项 因为Integer、Double继承了Number&#xff0c;根据多态性&#xff0c;以下语句是合法的 Number n new Integer(10); // OK, 父类引用变量可以指向子类对象 n 2.9 // OK&#xff0c;n实…

Mac-Charles

Charles是什么 HTTP代理服务器&#xff0c;HTTP监视器 Charles可以当作一个代理服务器 当浏览器链接这个代理服务器的时候 Charles会监控浏览器发出和接收的所有数据(reques,response,HTTP Headers(cookies和cash)) 反转代理器 Charles主要功能、 1.SSL代理 2.模拟慢速网络…

双目立体视觉:SAD算法

算法原理SAD(Sum of absolute differences)是一种图像匹配算法。基本思想&#xff1a;差的绝对值之和。此算法常用于图像块匹配&#xff0c;将每个像素对应数值之差的绝对值求和&#xff0c;据此评估两个图像块的相似度。该算法快速、但并不精确&#xff0c;通常用于多级处理的…

如何在Power Virtual Agents中实现身份验证

今天我们介绍一下如何通过身份验证的方式来使用Power Virtual Agents。首先进入“Microsoft 365-管理-Azure Active Directory管理中心”。 进入“Azure Active Directory管理中心”后选择“Azure Active Directory”中的“应用注册”-“新注册”。 输入新创建的应用程序名称后…

XXL-JOB分布式任务调度框架(一)-基础入门

文章目录1.什么是任务调度2.常见定时任务方案2.1. 传统定时任务方案示例2.2. 缺点分析3.什么是分布式任务调度&#xff1f;3.1. 并行任务调度3.2. 高可用3.3. 弹性扩容3.4. 任务管理与监测4.市面上常见的分布式任务调度产品5.初识xxl-job6.xxl-job架构设计6.1.设计思想6.2.架构…

程序人生 - 学习和分享

文章目录记于 230217学习安排泛学AI 和 未来记于 230217 刚入行时&#xff0c;经常看到技术博客中&#xff0c;博主们分享生活&#xff0c;比如相亲、上班生活&#xff0c;甚至还有人发结婚照。这个栏目通常被称为&#xff1a;程序人生。 这个现象已经很久没看到了&#xff0c…

BFC 是什么

在页面布局的时候&#xff0c;经常出现以下情况&#xff1a; 这个元素高度怎么没了&#xff1f;这两栏布局怎么没法自适应&#xff1f;这两个元素的间距怎么有点奇怪的样子&#xff1f;...... 原因是元素之间相互的影响&#xff0c;导致了意料之外的情况&#xff0c;这里就涉及…

吴恩达深度学习笔记(八)——卷积神经网络(上)

一、卷积相关 用一个ff的过滤器卷积一个nn的图像&#xff0c;假如padding为p&#xff0c;步幅为s&#xff0c;输出大小则为&#xff1a; [n2p−fs1][n2p−fs1][\frac{n2p-f}{s}1][\frac{n2p-f}{s}1][sn2p−f​1][sn2p−f​1] []表示向下取整&#xff08;floor) 大部分深度学习…

Unreal Engine04:Visual Studio和Editor的协同开发

写在前面 这里主要是记录一下Visual Studio和Editor之间的关系和如何使用它们进行UE4协同开发。 一、启动 1. 先启动Visual Studio再启动Editor (1) 打开项目根目录下的xxx.sln解决方案&#xff0c;即可启动Visual Studio&#xff0c;这个是和普通的C项目打开方式相同的&…

2023美国大学生数学建模竞赛C题思路解析(含代码+数据可视化)

以下为2023美国大学生数学建模竞赛C题思路解析&#xff08;含代码数据可视化&#xff09;规则&#xff1a;猜词&#xff0c;字母猜对&#xff0c;位置不对为黄色&#xff0c;位置对为绿色&#xff0c;两者皆不对为灰色。困难模式下的要求&#xff1a;对于猜对的字母&#xff08…

RBAC权限模型

什么是RBAC权限模型&#xff1f; RBAC是基于角色的访问控制&#xff0c;在RBAC中&#xff0c;权限与角色相关联&#xff0c;用户通过成为适当角色的成员而得到这些角色的权限。 1.0级 用户、角色、权限 2.0 权限分级 公司>部门>小组 2.1 权限继承 ps: 这个人是一个小组长…

Java调用Selenium实现自动化测试

Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff0c;Opera等。 Selenium简介 Selenium是一个用于Web应用…

Spring MVC 之Tomcat启动流程

从web.xml说起在开始 Spring MVC 的分析之前&#xff0c;先来聊一聊 Java 初学者接触的最多的 Java Web 基础。还记得我的第一个 Web 工程是由 Servlet、Velocity 和 Filter 来完成的&#xff0c;那时几乎所有人都是根据 Servlet、JSP 和 Filter 来编写自己的第一个 Hello Worl…

Java基本语法

目录 一、注释方式 1、单行注释 // 2、多行注释 /*...*/ 3、文档注释 /**....*/ 二、标识符和关键字 三、数据类型 拓展及面试题讲解 1、整数拓展 进制 二进制0b 八进制0 十六进制0x 2、字符拓展 编码Unicode表 2字节 0~65536 3、字符串拓展 4、布尔值拓展 一、注释方式…

可视化已编译Java类文件字节码的神器jclasslib

概述作为Java工程师的你曾被伤害过吗&#xff1f;你是否也遇到过这些问题&#xff1f;运行着的线上系统突然卡死&#xff0c;系统无法访问&#xff0c;甚至直接OOM想解决线上JVM GC问题&#xff0c;但却无从下手新项目上线&#xff0c;对各种JVM参数设置一脸茫然&#xff0c;直…

基于树莓派的智能家居项目整理

一、功能介绍 二、设计框图 三、实物展示 四、程序 一、功能介绍硬件&#xff1a;树莓派3B、LD3320语音识别模块、pi 摄像头、继电器组、小灯、火焰传感器、蜂鸣器、电 磁锁 项目框架&#xff1a; 采用了简单工厂模式的一个设计方式。稳定&#xff0c;拓展性…