C语言操作符详解(二)

统计整数在二进制中1的个数:

这是上一篇文章留下的问题,这里为大家作答:

//统计二进制中1的个数
int statistics(int a)
{
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if (a & 1)
		{
			count++;
		}
		a = a >> 1;
	}
	//while (a)
	//{
	//	a = a & (a - 1);//每次都会消去一个1
	//	count++;
	//}
	return count;
}
int main() 
{
	int a = 0;
	scanf("%d", &a);
	int num = statistics(a);
	printf("%d\n", num);
}

未被注释的部分就是运用位操作符实现的代码,注释的部分也是一种方法,但是这种方法很少被想到。

赋值操作符

赋值操作符就是 =   可以为变量赋上一个自己满意的值:

int num;
num = 10;//这就是赋值

并且赋值可以连续使用:

int a;
int b;
int c;
a = b = c+1;

但是同样的意思下分开写不是更让人知道且易于调试:

a = b;
b = c+1;

复合赋值符

+=

-=

*=

/=

%=

>>=

<<=

&=

|=

^=

这些都是复合赋值操作符

单目操作符

! 逻辑反操作

-  负值

+  正值

&  取地址

sizeof  操作数的类型长度(以字节单位)


~  对一个数的二进制按位取反(~0  就是  -1)

--  前置或后置--

++  前置或后置++

*  解引用操作符

(类型)   强制类型转换

特别重点:sizeof和数组

来看一段代码:这里的1 2 3 4 会输出什么?

void teer1(int arr[])
{
	printf("3:%d\n", sizeof(arr));
}
void teer2(char arr[])
{
	printf("4:%d\n", sizeof(arr));
}

int main()
{
	int arr1[10] = { 0 };
	char ch[10] = { 0 };
	printf("1:%d\n", sizeof(arr1));
	printf("2:%d\n", sizeof(ch));
	teer1(arr1);
	teer2(ch);

}

 我们说过数组名其实是首元素的地址,但是sizeof是一个特例,sizeof计算的是整个数组,但是函数传参传的是数组名也就是地址,地址的大小都是一样的。

关系操作符

>

>=

<

<=

!=

==

注意:==才是比较 ,= 是赋值

逻辑操作符

&&

||

逻辑与,逻辑或的特点:

#include<stdio.h>

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;//逻辑与&& 如果前面已经知道为假了,后面就都不会计算了。
	printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);

}

#include<stdio.h>

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;//逻辑或|| 如果知道前面有一个为真了,后面也不会计算了。
	printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);

}

 条件操作符

exp1 ? exp2 : exp3;

条件操作符,最常用的方式就是找两个数的最大数:

int a = 5;

int b = 6;

int i = 0;

i = a > b ? a : b;

 逗号表达式

exp1,exp2,exp3,.......

逗号表达式就是用逗号把多个表达式隔开,是从左向右依次执行,整个表达式的结果是最后一个表达式的结果。

int a = 1;

int b = 2;

int c = (a>b,a=b+10,b=a+1);

上述代码中,c 是多少? 答案是13。

表达式求值

隐式类型转换:

C语言中整数运算是以整形类型精度进行的,为了这个精度,表达式中的字符和短整型在使用前会被转换为普通整形,这种转换被叫做整形提升

char a,b,c;

.......

a = b + c;

b 和 c 就会被提升为普通整形,然后在执行加法,加法之后结果会被截断,然后再存储在a 中。

如何整形提升的

整形提升是按照变量的数据类型的符号位来提升。

char c1 = -1;

变量从c1的二进制补码是8个比特位

11111111

因为char是有符号的char
所以高位补充符号位,即1:

11111111111111111111111111111111



char c2 = 1;

变量c2的二进制补码也是8个比特位

00000001

因为是有符号的char
所以高位补充符号位,即0:

00000000000000000000000000000001


算术转换:

如果某个操作符的各个操作数属于不同的类型,那么必须进行操作数的类型转换,否则无法进行操作,下面是寻常算术转换:

long double

double

float

unsigned long int

long int 

unsigned int

int

如果在这个排行中排名低,那么要转换成高的才可以进行运算。

算术转换要合理,要不然有潜在问题

操作符的属性

复杂表达式的求值有三个影响的因素:

1.操作符的优先级

2.操作符的结合性

3.是否控制求值顺序

注意:函数的调用先后顺序无法通过操作符的优先级确定,类如下面代码就是有问题的:

int fun()
{
	static int count = 1;
	return ++count;
}

int main()
{
	int answer;
	answer = fun() - fun() * fun();
	printf("%d\n", answer);
}

总结:两个相邻的操作符先执行哪个,取决于优先级,如果相同,取决于他们的结合性(可以在网上查)。如果我们的表达式无法通过操作符的属性确定唯一的计算路径,那么就是有问题的。

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

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

相关文章

React(五)UseEffect、UseRef

(一)useEffect useEffect – React 中文文档 useEffect hook用于模拟以前的class组件的生命周期&#xff0c;但比原本的生命周期有着更强大的功能 1.类组件的生命周期 在类组件编程时&#xff0c;网络请求&#xff0c;订阅等操作都是在生命周期中完成 import React, { Co…

网安速成之选择题(详细解析版)

网安速成之选择题 单选多选 单选 密码学的目的是&#xff08; C &#xff09;。 A. 研究数据压缩 B. 研究数据解密 C. 研究数据保密 D. 研究漏洞扫描 密码学的目的是研究数据加密&#xff0c;保证数据的机密性 数据机密性安全服务的基础是&#xff08; D &#xff09;。 A. 数…

11.2 选择排序

目录 11.2 选择排序 11.2.1 算法特性 11.2 选择排序 选择排序&#xff08;selection sort&#xff09;的工作原理非常简单&#xff1a;开启一个循环&#xff0c;每轮从未排序区间选择最小的元素&#xff0c;将其放到已排序区间的末尾。 设数组的长度为 &#x1d45b;…

杂牌记录仪TS视频流恢复方法

大多数的记录仪都采用了MP4/MOV文件方案&#xff0c;极少数的可能在用AVI文件&#xff0c;极极少数的在用TS文件方案。很多人可能不太解TS文件&#xff0c;这是一种古老的视频文件结构&#xff0c;下边这个案例我们来看下TS视频文件的恢复方法。 故障存储:8G存储卡/fat32文件系…

pdb文件名称被修改导致pdb文件加载失败的实战排查案例分享

目录 1、概述 2、问题说明 3、pdb文件加载失败的可能原因有哪些&#xff1f; 4、使用!sym noisy打开pdb加载详情&#xff0c;发现pdb文件名称确实被修改了 5、Windbg是如何知道要加载pdb文件名称的&#xff1f; C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表…

五类数据容器对比总结 知道喔!

五类数据容器对比总结 1.五类数据容器的区别 是否支持下标索引 支持&#xff1a;列表、元组、字符串---序列类型 不支持&#xff1a;集合、字典---非序列类型 是否支持重复元素 支持&#xff1a;列表、元组、字符串---序列类型 不支持&#xff1a;集合、字典---非序列类型 是…

Ray Tracing in one Weekend But on CUDA

Ray Tracing in one Weekend But on CUDA 环境说明项目代码项目内容思路实现方法效果 环境说明 代码运行在Visual Studio 2019环境&#xff0c;显卡为NVIDIA GeForce GTX 1650&#xff0c;CUDA版本为11.6&#xff0c;cuDNN版本为8.4.0。具体配置方式见CUDA C/C 从入门到入土 第…

所有人都可以做的副业兼职,短剧推广,1天挣几百,附详细方法!

自从上次向大家介绍了短剧掘金项目以来&#xff0c;便陆续收到了众多朋友的询问&#xff1a;现在是否还能加入短剧掘金的大军&#xff1f;答案是肯定的。目前&#xff0c;无论是各大视频平台还是其他渠道&#xff0c;短剧掘金项目都呈现出蓬勃发展的态势。而且&#xff0c;相关…

Seq2Seq模型:详述其发展历程、深远影响与结构深度剖析

Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种深度学习架构&#xff0c;专为处理从一个输入序列到一个输出序列的映射任务设计。这种模型最初应用于机器翻译任务&#xff0c;但因其灵活性和有效性&#xff0c;现已被广泛应用于自然语言处理&#xff08;NLP&a…

PageHelper多数据源无法自动切换数据源问题解决

在使用PageHelper进行分页处理的过程中&#xff0c;通过配置autoRuntimeDialect: true发现&#xff0c;在执行MySQL分页处理后&#xff0c;继续执行SqlServer的分页&#xff0c;使用的仍然是MySQL的语法&#xff0c;PageHelper并没有进行自动切换数据源处理。 在查看源码的时候…

Kaggle线上零售 CRM分析(RFM+BG-NBD+生存分析+PySpark)

数据集地址&#xff1a;数据集地址 我的NoteBook地址&#xff1a;NoteBook地址 这个此在线零售数据集包含2009年12月1日至2011年12月9日期间的在线零售的所有交易。该公司主要销售独特的各种场合礼品。这家公司的许多客户都是批发商。本文将通过pyspark对数据进行导入与预处理&…

TVS管的功率计算与选型

“选择多大功率的TVS管才算合适&#xff1f;”。关于TVS功率的选择&#xff0c;不晓得之前你考虑过没。反正我这边是感觉网上关于TVS管参数、选型等文章比较多&#xff0c;但关于TVS管功率计算及功率选型的文章比较少。但往往在这些点上更能体现面试者的功力。 研究过TVS规格书…

9-Django项目--验证码操作

目录 templates/login/login.html utils/code.py views/login.py 验证码 生成验证码 code.py 应用验证码 views.py login.html templates/login/login.html {% load static %} <!DOCTYPE html> <html lang"en"> <head><meta charset&q…

Polar Web【简单】login

Polar Web【简单】login 本文旨在记录此题的探索和解决过程。 Contents Polar Web【简单】login探索&思路EXP (python)结果&总结 探索&思路 查看源码&#xff0c;发现存在用户信息泄露。尝试用获取信息登录&#xff0c;显示成功&#xff0c;但其后没有可做的操作。…

【力扣】不相交的线

一、题目描述 二、题目解析 根据上图及题目给出的示例&#xff0c;我们不难发现&#xff0c;我们其实要找的就是两个数组中的最长公共子序列的长度。 因此&#xff0c;本题我们就可以直接转化为求两个数组中的最长公共子序列的长度。 对于 最长公共子序列问题&#xff0c;可…

Java Socket 网络编程实例(阻塞IO、非阻塞IO、多路复用Selector、AIO)

文章目录 1. 概述2. TCP 阻塞式IO 网络编程实例2.1 TCP网络编程服务端2.2 ByteBufferUtil2.3 客户端代码2.4 运行截图 3. TCP 非阻塞式IO 网络编程实例3.1 服务端3.2 客户端3.3 运行截图 4. 多路复用4.1 服务器端4.2 客户端4.3 运行截图 5. AIO5.1 AIO 服务端5.2 客户端5.3 运行…

【Python】Python异步编程

Python 异步编程 异步编程 异步编程是一种编程范式&#xff0c;通过非阻塞的方式执行任务&#xff0c;允许程序在等待某些操作&#xff08;如I/O操作、网络请求、数据库查询等&#xff09;完成时&#xff0c;继续执行其他任务。这与同步编程&#xff08;或阻塞编程&#xff09…

【图像处理与机器视觉】XJTU期末考点

题型 选择&#xff1a;1 分10 填空&#xff1a;1 分15 简答题&#xff08;也含有计算和画图&#xff09;&#xff1a;10 分*4 计算题&#xff1a;15 分20 分 考点 选择题&#xff08;部分&#xff09; 数字图像处理基础 p(x,y),q(s,t)两个像素之间的距离由公式&#xff1a…

知乎x-zse-96、x-zse-81

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

GraphQL(2):使用express和GraphQL编写helloworld

1 安装express、graphql以及express-graphql 在项目的目录下运行一下命令。 npm init -y npm install express graphql express-graphql -S 2 新建helloworld.js 代码如下&#xff1a; const express require(express); const {buildSchema} require(graphql); const grap…