C语言-【操作符二】

news2025/5/19 19:28:04

          Hello,大家好,前面的文章里边介绍了算术、赋值以及移位操作符,这篇文章呢,就介绍一下C语言中的其他操作符吧~

目录

位操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用,函数调用和结构成员


一.位操作符

        这类操作符可以直接对内存中存储的二进制位进行操作,但前提是,它所操作的对象只能是整型。因为我们知道,整型和浮点型在内存中的存储方式是完全不一样的,如果根据操作整型的方式去操作浮点数,那不得糟糕透顶啊,哈哈哈哈哈。前面的文章中讲到的移位操作符也是位操作符中的一种哦~

⚠:在移位操作中,可千万不要移动负数位,这个是未标准定义的。

(1)& :按位与(只要有0时就为0,只有同时为1时才为1);

(2)/  :按位或(只有同时为0时才为0,其余情况都为1);

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

举个简单的例子吧:

 

 

二.单目操作符

      顾名思义,单目嘛,也就是只接受一个操作数的操作符,我们就当它只有一个眼睛吧,哈哈哈,主要有:

//单目操作符
 ! //逻辑反操作
 -  //取负值
 +  //取正值
 &  //取地址
 sizeof  //操作数的类型长度(以字节为单位)
 ~ //对一个数的二进制按位取反
 -- //前置减减,后置减减
 ++ //前置加加,后置加加
 *  //间接访问操作符(解引用操作符)
(类型) //强制类型转换

 注:这里的&,*应用于指针;

        sizeof 是操作符,不是函数!

举例子说明最直观了哦:

(1) !操作符

(2) &取地址操作符

 

 

从上面的例子就可以看到,

int a = 10;
int *pa = &a;

 在这个代码中,希望大家能够正确的理解它们的含义哦。

不过,前面的这两行代码也可以写成:

int *pa;
pa = &a;

 运行结果也是一样的。只是在后面的这种方式中,pa只是一个定义为int型的指针,pa = &a 它的前面没其他多余的标识,但是在printf("%d\n",*pa) 打印结果的时候,应用了解引用操作符(*)。

pa 虽然说是指针,它的里边存放着a的地址,不过它可把自己没有忘啊,它也有自己的地址,所以,通过对pa的地址进行解引用操作,仍然可以找到a所对应的值哦。

 (3)sizeof操作符

    sizeof操作符以字节的形式给出了其操作数所占存储空间的大小,操作数可以是一个表达式或者是括在括号内的类型名,操作数所占存储空间的大小由操作数的类型决定,从而返回一个对象或者类型所占的内存字节数。

    printf("%d\n", sizeof(a));//可以这样写;
    printf("%d\n", sizeof(int)); //可以这样写;
    printf("%d\n", sizeof a); //可以这样写;
    printf("%d\n", sizeof int);//但不可以这样写;

在这里,添加一个小的知识点吧:

关于sizeof 和 strlen 的区别: 

sizeof 是C语言中的一个操作符,用于计算变量或者类型所占内存空间大小;

strlen(string strlen) 是C语言中的一个函数,用于计算字符串的长度,不包括结束符"\0";

      在使用strlen函数读取字符串的时候,遇到“\0”时就停止读取,此时,“\0”前面的字符的个数就是字符串的长度,这里,“\0”不算做一个字符。这个‘\0’转义字符在任何一个字符串的结尾都会隐藏一个"\0",是字符串结束的标志。

老规矩,看代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	char arr[] = "abcdef";
	printf("%d\n", strlen("abcdef"));
	printf("%d\n", sizeof("abcdef"));

	return 0;
}

运行结果: 

 (4)前后置++操作符,前后置 - -操作符

前置:先给自己加(减),再使用;

后置:先使用,再给自己加(减);

看例子吧: 

(5)~对二进制的操作数取反操作符

比如二进制数为:1001,取反则为:0110

看代码:

 

三.关系操作符

>    >=    <    <=    != (用于测试“不相等”)  == (用于测试“相等”)

这些操作符只能应用到适合的类型上,虽然说这些运算符比较简单,但是大家在日常的练习与应用中要注意一些小陷进哦~

还有一个需要大家注意的是:

= 是赋值,==是判断相等;

四.逻辑操作符

(1)逻辑与:&&(并且)

(2)逻辑或:||(或者)

判断某年是不是闰年这个例子,就对这两个操作符简单的运用了

#include<stdio.h>
int main()
{
    int year;
    printf("请输入年份:");
    scanf("%d", &year);
    if ((year % 4 == 0 && year % 100) || (year % 400 == 0))
    {
        printf("是闰年");
    }
    else
    {
        printf("不是闰年");
    }
    return 0;
}

注:

(year % 4 == 0 && year % 100) 和 (year % 400 == 0) 只需满足一个即可;
如果拿这个条件判断的时候,(year % 4 == 0 && year % 100),year % 4 == 0 和 year % 100可得必须都满足哦!!!

 五.条件操作符

这个操作符也是三目操作符(有三个操作数)

形式:exp1?exp2:exp3

     若条件1成立,条件2为真,则整个表达式的结果就是条件2的结果,否则,就是条件3的结果。

举例子说吧:

 

六.逗号表达式(用逗号隔开的多个表达式)

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

 举例子吧:

七.下标引用,函数调用和结构成员

(一)下标引用

操作数:一个数组名 + 一个索引值

 

 (二)函数调用

()函数调用操作符接受一个或者多个操作数,第一个操作数是函数名,其余的操作数就是传递给函数的参数。

   这里大家要注意哦,对于函数调用操作符来说,最少有1个操作数

 (三)结构成员访问操作符

访问一个结构成员的操作符分为:

(1) 格式:结构体.成员名;

(2)-> 格式:结构体指针->成员名

举个例子:

         好啦,关于C语言里操作符的介绍终于在本篇文章画上句号了,如果有错误之处,欢迎各位小伙伴们在评论区多多互动吖~

 

 

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

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

相关文章

C++11多线程:windows临界区和Linux互斥锁、递归锁的区别与使用。

文章目录 前言一、windows临界区1.1 基本概念1.2 函数使用 二、使用步骤1.代码示例1 总结 前言 多线程windows临界区和Linux互斥锁 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、windows临界区 1.1 基本概念 Linux下有递归锁&#xff0c;递归锁…

着重讲解一下自动化测试框架的思想与构建策略,让你重新了解自动化测试框架

目录 序言&#xff1a; 一、简述自动化测试框架 二、自动化测试框架思想 三、构建自动化测试框架的策略 四、自动化测试框架的发展趋势 序言&#xff1a; 也许到现在大家对所谓的“自动化测试框架”仍然觉得是一种神秘的东西&#xff0c;仍然觉得其与各位很远&#xff1b;…

【JavaScript】ES6新特性(1)

1. let 声明变量 let 声明的变量只在 let 命令所在的代码块内有效 块级作用域 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

08-04 中间件和平台运行期监控

缓存中间件的三大坑 缓存击穿 用户访问热点数据&#xff0c;并且缓存中没有热点数据&#xff0c;大量访问直接到DB&#xff0c;热点击穿采用Canal做数据异构方案&#xff0c;把数据库中的值全部放到缓存热点缓存策略&#xff1a;通过分析调用日志获取热点数据&#xff0c;放到…

PMP项目管理-[第十一章]风险管理

风险管理知识体系&#xff1a; 规划风险管理&#xff1a; 识别风险&#xff1a; 实施定性风险分析&#xff1a; 实施定量风险分析&#xff1a; 监督风险&#xff1a; 11.1 风险 定义&#xff1a;是一种不确定的事件或条件&#xff0c;一旦发生&#xff0c;就会对一个或多个项目…

Elasticsearch(二)

Clasticsearch&#xff08;二&#xff09; DSL查询语法 文档 文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html 常见查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。如&#xff1a…

eNSP模拟器下VRRP+MSTP实验配置

①&#xff1a;底层配置&#xff1a; vlan trunk 略 ②&#xff1a;MSTP配置&#xff1a; 所有交换机&#xff1a; stp region-configuration region-name aa revision-level 1 instance 1 vlan 2 to 3 instance 2 vlan 4 to 5 active region-configuration 核心1&…

Java笔记_21(网络编程)

Java笔记_21 一、网路编程1.1、初始网络编程1.2、网络编程三要素1.3、IP1.4、端口号1.5、协议1.6、UDP协议 一、网路编程 1.1、初始网络编程 什么是网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景:即时通信、网游对战…

(一)SAS初识

1、SAS常用工作窗口 “结果”&#xff08;Result&#xff09;窗口——管理SAS程序的输出结果&#xff1b; “日志”&#xff08;Log&#xff09;窗口——记录程序的运行情况&#xff1b; “SAS资源管理器”&#xff08;Explore&#xff09;窗口&#xff1b; “输出”&#xff0…

洛谷P1217-回文质数 Prime Palindromes

洛谷P1217-回文质数 Prime Palindromes 这个题目我做出来了但是超时了&#xff0c;时间复杂度有点高&#xff0c;主要是因为我用了大量的循环&#xff0c; 所以我这个是比较暴力的解法&#xff0c;下面我分析我的暴力代码 首先是判断回文数的函数 第一步将标识传入参数是不是…

[数据集][目标检测]篮球数据集VOC格式7398张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;7398 标注数量(xml文件个数)&#xff1a;7398 标注类别数&#xff1a;1 标注类别名称:["basketball"]…

详解MNIST数据集下载、解析及显示的Python实现

Content MNIST数据集基本介绍下载MNIST数据集到本地解析MNIST数据集显示MNIST数据集中训练集的前9张图片和标签 随着图像处理、计算机视觉、机器学习&#xff0c;甚至深度学习的蓬勃发展&#xff0c;一个良好的数据集作为学习和测试相关算法非常重要。MNIST数据集对于想要学习和…

PMP 高项 07-项目质量管理

项目质量管理 概念 质量的基本概念 克劳斯比&#xff1a;符合要求 戴明&#xff1a;低成本条件下可预测的一致性和可靠度&#xff0c;适应市场需要 朱兰&#xff1a;适用性&#xff0c;满足客户需要 国际标准化组织&#xff1a;质量是反映实体&#xff08;产品、过程或活动等…

中间件容器化部署实现方案的前期调研

中间件容器化部署是为了实现GitOps模式的持续交付,实现部署即代码。痛点在于大多数中间件都是有状态的,本篇介绍如何实现有状态中间件的容器化部署。 常见中间件要实现容器化部署,需要解决以下问题: 对于网关类中间件,作为流量入口,虽然是无状态类型的中间件,但由于需要…

flask实现S3 Web客户端下载文件

import io from minio import Minio from minio.error import S3Error from flask import Flask, jsonify, render_template, request, send_file# 实例化 Flask 应用 app Flask(__name__)# 配置 MinIO 客户端 minio_client Minio("192.168.2.110:58894",access_ke…

Vue CLI 初始化脚手架

3.1. 初始化脚手架 3.1.1. 说明 Vue脚手架是Vue官方提供的标准化开发工具&#xff08;开发平台&#xff09;最新的版本是 4.x文档 Vue CLI 3.1.2. 具体步骤 如果下载缓慢请配置npm淘宝镜像npm config set registry http://registry.npm.taobao.org全局安装 vue/cli npm ins…

Python BP算法模板

BP算法模板 神经网络结构 三大基本结构 权重(轴突、树突) 权重的矩阵表示 数值(胞体) 数值处理方式 sigmoid 函数 def __sigmoid(self,x):return 1 / (1 np.exp(-x))sigmoid 的导函数 def __sigmoid_prime(self,x):return x * (1 - x)sigmoid 函数图像 其目的是将数值限制…

Java多线程synchronized Lock volatile,看完这一篇就够了

线程安全问题 一、对线程安全的理解&#xff08;实际上是内存安全&#xff09;二、线程同步的实现方法synchronized实现同步Lock实现同步volatile实现同步JUC的Callable实现同步 三、守护线程四、ThreadLocal原理和使用场景五、Thread类的常用方法&#xff0c;以及线程的状态六…

Linux下使用Mysql 第二天

目录 Mysql数据库API库 编写hello应用链接函数库 MySQL API常用函数 总体印象 初始化 Makefile 管理 连接数据库关闭连接 读取数据 查询表数据 获取结果集 解析结果集 释放结果集 获取列数 获取表头 实例程序 MySQL tools实现 思路分析 程序实现 中文问题 …

MS iCraft Z790ITX WIFI 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板MS iCraft Z790ITX WIFI 处理器Intel Core i5-13400已驱动 内存Asgard DDR5 6400CL32 16GBx2 RGB已驱动 硬盘西数 WDS250G3X0C-00SJG0 ( SN750) …