C-操作符

server/2024/12/2 17:01:26/

操作符种类

在C语言中,操作符有以下几种:

算术操作符

移位操作符

位操作符

逻辑操作符

条件操作符

逗号表达式

下标引用,函数调用

拓展:整型提升

我们介绍常用的几个

算术操作符

+(加),-(减),*(乘),/(除),%(取余操作符)

我们直接看列子

#include<stdio.h>
int main()
{int a = 5;int b = 5;printf("%d\n", a + b);printf("%d\n", a - b);printf("%d\n", a * b);printf("%d\n", a / b);printf("%d\n", a % b);return 0;
}

 这里我们需要特别注意的是/(除号)跟%(取余操作符)

“%”取的是余数

“/”取的是整除的结果

移位操作符(不可以进行负数移动并且只能是整数)

针对的是转化后的二进制:

“<<”左移操作符,左边舍去一位,右边补0

“>>”右移操作符,左边用0补充,右边舍弃一位

来看左移操作符列子:

#include<stdio.h>
int main()
{int a = 10;printf("%d\n", a << 1);return 0;
}

 先将10转化为二进制,然后左移一位,右边补0,得到20

右操作符与左操作符原理一样 

位操作符

“&”按位与,计算规则:有0为0,两个都是1才是1

“|”按位或,计算规则:有1为1,两个同时为0才是0

“^”按位异或,计算规则:相同为0,相异为1

#include <stdio.h>
int main()
{int num1 = 1;int num2 = 2;printf("%d\n",num1 & num2);//第一个printf("%d\n",num1 | num2);//第二个printf("%d\n",num1 ^ num2);//第三个return 0;
}

面试题目:

不创建第三个变量,来交换两个变量的值

#include <stdio.h>
int main()
{int a = 10;int b = 20;a = a ^ b;b = a ^ b;a = a ^ b;printf("a = %d b = %d\n", a, b);return 0;
}

 

上面图的下面红色字是计算思路

赋值操作符 

“=”一个等号就是赋值

这里延伸复合赋值操作符,就是有两个操作符组成,右边是等号,左边是一个操作符

“<=”,a <= b

“+=”,a+=b,就是a=a+b

……

单目操作符

“!”逻辑反操作

“-”负值

“+”正值

“&”取地址

“sizeof”求操作数长度,以字节为单位

“*”通常用在指针中

“++”加加,a++(先使用,再加一),++a(先加一,再使用)

“--”减减,同加加同理

展示

#include <stdio.h>
int main()
{int a = -10;int* p = NULL;printf("%d\n", !2);printf("%d\n", !0);a = -a;p = &a;printf("%d\n", sizeof(a));printf("%d\n", sizeof(int));printf("%d\n", sizeof a);return 0;
}
sizeof和数组

首先看列子:

#include <stdio.h>
void test1(int arr[])
{printf("%d\n", sizeof(arr));//(2)
}
void test2(char ch[])
{printf("%d\n", sizeof(ch));//(4)
}
int main()
{int arr[10] = { 0 };char ch[10] = { 0 };printf("%d\n", sizeof(arr));//(1)printf("%d\n", sizeof(ch));//(3)test1(arr);test2(ch);return 0;
}

如果将数组传过去进行sizeof求大小,那么求的只是那个指针的大小,不区分char,int类型

在“X86”环境中求的是4,在“X64”环境中求的是8

关系操作符

“>” 大于

“<”小于

“>=”大于等于

“<=”小于等于

“!=”不等于

“==”判断相等

逻辑操作符

“&&” 并且,必须要所有条件满足计算才会停下来,否则返回0

“||”或者,仅需满足一个条件,计算就会停下来

列题:

#include <stdio.h>
int main()
{int i = 0, a = 0, b = 2, c = 3, d = 4;i = a++ && ++b && d++;//i = a++||++b||d++;printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);return 0;
}

a=1,b=2,c=3,d=4

因为a=0,代入表达式,0为假,计算停止,后面的表达式也就不再继续

条件操作符

(ese ? es1 : es2),首先计算ese表达式,如果为真,答案就是es1,如果为假,答案就是es2

逗号表达式

(es1,es2,es3,es4,es5) 从左到右,依次进行,整个表达式,是最后一个表达式的结果,碰到假的表达式就跳过

下标引用,函数调用

下标引用(数组下标从0开始),如果有10个元素,最后一个元素的下标是9

int arr[10];//创建数组arr[9] = 10;//实用下标引用操作符。

函数调用(就是调用一个函数)
 

#include <stdio.h>void test1(){printf("hehe\n");}void test2(const char *str){printf("%s\n", str);}int main(){test1();            //实用()作为函数调用操作符。test2("hello bit.");//实用()作为函数调用操作符。return 0;
}
整型提升
#include<stdio.h>
int main()
{char a = 3;char b = 127;char c = a + b;printf("%d\n",c );return 0;
}

 

 我们来看解析:

 


http://www.ppmy.cn/server/146777.html

相关文章

Flink四大基石之窗口(Window)使用详解

目录 一、引言 二、为什么需要 Window 三、Window 的控制属性 窗口的长度&#xff08;大小&#xff09; 窗口的间隔 四、Flink 窗口应用代码结构 是否分组 Keyed Window --键控窗 Non-Keyed Window 核心操作流程 五、Window 的生命周期 分配阶段 触发计算 六、Wi…

Vue3 开源UI 框架推荐 (大全)

一 、前言 &#x1f4a5;这篇文章主要推荐了支持 Vue3 的开源 UI 框架&#xff0c;包括 web 端和移动端的多个框架&#xff0c;如 Element-Plus、Ant Design Vue 等 web 端框架&#xff0c;以及 Vant、NutUI 等移动端框架&#xff0c;并分别介绍了它们的特性和资源地址。&#…

系统监控——分布式链路追踪系统

摘要 本文深入探讨了分布式链路追踪系统的必要性与实施细节。随着软件架构的复杂化&#xff0c;传统的日志分析方法已不足以应对问题定位的需求。文章首先解释了链路追踪的基本概念&#xff0c;如Trace和Span&#xff0c;并讨论了其基本原理。接着&#xff0c;文章介绍了SkyWa…

How to monitor Spring Boot apps with the AppDynamics Java Agent

本文介绍如何使用 AppDynamics Java 代理监视 Azure Spring Apps 中的 Spring Boot 应用程序。 使用 AppDynamics Java 代理可以&#xff1a; 监视应用程序使用环境变量配置 AppDynamics Java 代理 在 AppDynamics 仪表板中检查所有监视数据 How to monitor Spring Boot app…

关于使用注册表修改键盘的键位映射

修改注册表实现键盘的键位映射 前言一、scancode是什么&#xff1f;二、步骤1.打开注册表2.scancode表 总结 前言 弄了个蓝牙的欧洲键盘&#xff0c;但左上角居然是WWW home键&#xff0c;还找不到Esc键&#xff0c;崩溃了&#xff0c;VI都用不了。 赶紧考虑键位映射&#xff…

探索 IntelliJ IDEA 中 Spring Boot 运行配置

前言 IntelliJ IDEA 作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为 Spring Boot 应用提供了丰富的运行配置选项&#xff0c;定义了如何在 IntelliJ IDEA 中运行 Spring Boot 应用程序&#xff0c;当从主类文件运行应用程序时&#xff0c;IDE 将创建…

Android 图形系统之七:SurfaceFlinger

一. 引言 什么是 SurfaceFlinger&#xff1f;SurfaceFlinger 的核心作用和地位&#xff1f;为什么需要了解 SurfaceFlinger&#xff1f; 二. SurfaceFlinger 的基本概念 Surface 和 SurfaceFlinger 的关系SurfaceFlinger 与图形渲染&#xff08;OpenGL ES 和 Vulkan&#xf…

如何在Solana链上开发Dapp?RPC节点的要求

在 Solana 链上开发 DApp 是一个系统性过程 1. 理解 Solana 和其开发模型 Solana 是高性能区块链&#xff0c;采用 Rust 语言开发智能合约&#xff08;称为 Program&#xff09;。开发 DApp 需要掌握以下核心概念&#xff1a; • 账户模型&#xff1a;Solana 使用账户存储数…