操作符详解-C语言

news2025/1/22 18:03:42

目录

一、操作符分类

二、算术操作符

三、移位操作符

        3.1. 左移操作数

         3.2 右移操作符

四、位操作符

五、赋值操作符

六、单目操作符

七、关系操作符

八、逻辑操作符

九、条件操作符

十、逗号表达式

十一、下标引用函数调用和结构体成员


一、操作符分类

        操作符分为算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式和下标引用、函数调用与结构体成员。

二、算术操作符

        +        -        *        /        %

        除% 操作符外,其他操作符可以作用于整数和浮点数; / 操作符,如果两个操作数都为整数,执行整数除法,而只要有浮点数就执行浮点数除法% 操作符的两个操作数必须为整数,返回的是整除之后的余数。

三、移位操作符

        <<        左移操作符

        >>        右移操作符

        移位操作符的操作数只能是整数。

        3.1. 左移操作数

        移位规则:丢弃最左边,在最右边补0

         3.2 右移操作符

        右移分为两种:1.逻辑右移:最左边用0填充,丢弃最右边;2.算数移位:最左边填充该值的符号位,丢弃最右边

        

         不能移动负数位,这是标准为定义,使用会出错。

四、位操作符

        &     按位与        |     按位或        ^按位异或

        操作数必须是整数。

        示例     求一个整数存储在内存中的二进制中1的个数

#include <stdio.h>

//方法1
int main()
{
        int num = 10;

        int count=0; 

        while(num)

        {
                if(num%2 == 1)
                count++;
                num = num/2;
        }
        printf("二进制中1的个数 = %d\n", count);
        return 0;
}

//方法2

int main()
{
        int num = -1;
        int i = 0;
        int count = 0;
        for(i=0; i<32; i++)
        {
                if( num & (1 << i) )
                count++;
        }
        printf("二进制中1的个数 = %d\n",count);
        return 0;
}

//方法3

int main()
{
        int num = -1;
        int i = 0;
        int count = 0;
        while(num)
        {
                count++;
                num = num&(num-1);
        }
        printf("二进制中1的个数 = %d\n",count);
        return 0;
}

五、赋值操作符

        =       赋值操作符

         int a=10;

        复合赋值符

        +=        -=        *=        /=        %=        >>=        <<=        &=        |=        ^=

        int x=10;

        x=x+10;

        x+=10;//达到上述同样效果

六、单目操作符

     !  逻辑反操作        -     负值        +     正值          &   取地址        sizeof     操作数类型长度

     ~     对一个数的二进制按位取反        --     前置、后置--        ++前置、后置++

     *        间接访问操作符(解引用操作)     (类型)  强制类型转化

        示例

int main()
{
    int a = -10;
    int* p = NULL;
    printf("%d\n", !2);//0
    printf("%d\n", !0);//1
    a = -a;
    p = &a;
    printf("%d\n", sizeof(a));//4
    printf("%d\n", sizeof(int));//4
    printf("%d\n", sizeof a);//4
    printf("%d\n", sizeof int);//报错
    return 0;
}

int main()
{
      int a = 10;
      int x = a++;//先使用,再增加,这样x的值是10;之后a变成11;--同理
      int y = ++a;//先自增,再使用,这样a的值是11;之后y变成11;--同理
      return 0;

}

七、关系操作符

        >        >=        <        <=        !=(不等于)        ==

八、逻辑操作符

        &&    逻辑与        ||   逻辑或

1&2----->0         按位与
1&&2---->1        逻辑与


1|2----->3          按位或
1||2---->1           逻辑或

        逻辑与特点:在表达式1&&表达式2中,只要表达式1为假(0)结果就为假(0),后面语句不在执行

int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    i = a++ && ++b && d++;
    printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
    return 0;
}

        逻辑或特点:在表达式1 || 表达式2中,只要表达式1为真(非0),结果就为真(非0),后面语句不再执行。

int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    i = a++||++b||d++;
    printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
    return 0;
}

 

九、条件操作符

        表达式1?表达式2:表达式3

        如果表达式1为真(非0)结果为表达式2的结果,否则为表达式3的结果。

十、逗号表达式

        表达式1,表达式2,表达式3,表达式4,……

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

int main() 
{
    int a = 1;
    int b = 2;
    int c = (a > b, a = b + 10, a, b = a + 1);
    printf("%d", c);
    return 0;
}

        

十一、下标引用函数调用和结构体成员

        1.[ ] 下标引用操作符,操作数:数组名和索引值

        int arr[10];
        arr[9] = 10;

        2.函数调用操作符

        接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

void test1()
{
        printf("hehe\n");
}
void test2(const char *str)
{
        printf("%s\n", str);
}
int main()
{
        test1(); 
        test2("hello bit.");
        return 0;
}

        3.访问结构体成员

        .        结构体名.成员名                ->        结构体指针->成员名

struct Stu
{
        char name[10];
        int age;
        char sex[5];
        double score;
};
void set_age1(struct Stu stu)
{
        stu.age = 18;
}
void set_age2(struct Stu* pStu)
{
        pStu->age = 18;//结构成员访问
}
int main()
{
        struct Stu stu;
        struct Stu* pStu = &stu;
        stu.age = 20;
        set_age1(stu);
        pStu->age = 20;
        set_age2(pStu);
        return 0;
}

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

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

相关文章

ArrayList的介绍

arrayList数组列表&#xff0c;特点是 ①有序&#xff1a;y元素存入的顺序和取出的顺序一致&#xff1b; ②可重复&#xff1a;可以存储重复的元素 ③可为null&#xff1a;可以存储多个null 优点&#xff1a;查询快 缺点&#xff1a;插入删除慢 size是元素的个数&#xff0c;容…

设计模式之详解

概念 在软件工程中&#xff0c;设计模式是指软件设计问题的推荐方案。 设计模式一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 好处 设计模式可以提高代码的可重用性和可读…

春秋云镜 CVE-2018-7422

春秋云镜 CVE-2018-7422 WordPress Plugin Site Editor LFI 靶标介绍 WordPress Plugin Site Editor LFI 启动场景 漏洞利用 exp http://<host>/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path/etc…

Python爬虫(十五)_案例:使用bs4的爬虫

本章将从Python案例讲起&#xff1a;所使用bs4做一个简单的爬虫案例&#xff0c;更多内容请参考:Python学习指南 案例&#xff1a;使用BeautifulSoup的爬虫 我们已腾讯社招页面来做演示&#xff1a;http://hr.tencent.com/position.php?&start10#a 使用BeautifulSoup4解析…

【3dsmax】制作简单的动画

步骤 1. 首先打开“时间配置”按钮进行设置 这里我们设置动画的总时长为300帧&#xff0c;也就是10秒 设置完毕后可以看到时间轴的最大刻度就是300 下面以一个长方体为例来掩饰动画的基本制作方式 2. 首先我们创建了一个长方体 3. 打开“自动关键点” 将时间轴滑块从第0帧修改…

两个git本地如何配置两个ssh密钥for mac

我是在mac上操作的。windows上也差不多一样操作。 1.找到本地的.ssh文件。我的文件结构如下如&#xff1a; 文件结构&#xff1a; &#xff08;1&#xff09;两个known_hosts文件是自动生成的&#xff0c;不用管 &#xff08;2&#xff09;readme文件是我个人记事本记录笔记…

Stable Diffusion 文生图技术原理

图像生成模型简介 图片生成领域来说&#xff0c;有四大主流生成模型&#xff1a;生成对抗模型&#xff08;GAN&#xff09;、变分自动编码器&#xff08;VAE&#xff09;、流模型&#xff08;Flow based Model&#xff09;、扩散模型&#xff08;Diffusion Model&#xff09;。…

Java 基于 SpringBoot+Vue 的在线考试系统的研究与实现,2.0 版本

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章第二章.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数…

Qt5升级到Qt6分步迁移教程

Qt框架的一个新的长期支持版本6.5最近发布。它为以前的版本引入了许多修复、改进和新功能。有些可能对您的应用程序有用&#xff08;如果不是现在&#xff0c;可能会在将来&#xff09;&#xff0c;因此最好将应用程序迁移到最新版本的框架。 仍然有许多应用程序仍在使用Qt 5&…

猜数字游戏过程honest(诚实)判定

根据记录的游戏过程文本&#xff0c;判定Tom是否不老实作弊。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那…

【Unity】【Amplify Shader Editor】ASE入门系列教程第二课 硬边溶解

新建材质&#xff08;不受光照影响&#xff09; 拖入图片 设置 添加节点&#xff1a; 快捷键&#xff1a;K 组合通道&#xff1a;快捷键 V 完成图

2023年11月软考中级信息安全工程师-最新全套学习资料分享

资源介绍 这里整理了一份2023年11月份软考中级-信息安全工程师考试的备考视频教程及电子资料&#xff0c;希望对小伙伴们有所帮助。&#xff08;下载方法详见文章底部&#xff09; 该教程收集于互联网&#xff0c;主要包括三个版本的资料&#xff0c;可以交叉结合使用。内容主…

Java小游戏

一、需求 二、思路一 HP当然是怪物的一个属性成员&#xff0c;而武器是角色的一个属性成员&#xff0c;类型可以使字符串&#xff0c;用于描述目前角色所装备的武器。角色类有一个攻击方法&#xff0c;以被攻击怪物为参数&#xff0c;当实施一次攻击时&#xff0c;攻击方法被调…

2021年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;最佳路径 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;和最大的路径称为最佳路径。你的任务就是求出最佳路径上的…

【力扣每日一题】2023.8.24 统计参与通信的服务器

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目顾名思义&#xff0c;要我们统计参与通信的服务器&#xff0c;给我们一个二维矩阵&#xff0c;元素为1的位置则表示是一台服务器。 …

特殊的矩阵与特殊的矩阵关系———实对称、正定、对角、零矩阵

一、特殊的矩阵 1、实对称矩阵 定义&#xff1a;都是实数&#xff0c;且 性质&#xff1a; &#xff08;1&#xff09;可以用特征值来求A的大小 &#xff08;2&#xff09;可以得到A的秩 &#xff08;3&#xff09;必定可以相似对角化 运用&#xff1a; 与实对称矩阵A合同的矩…

线性代数的学习和整理12: 矩阵与行列式,计算上的差别对比

目录 1 行列式和矩阵的比较 2 简单总结矩阵与行列式的不同 3 加减乘除的不同 3.1 加法不同 3.2 减法不同 3.3 标量乘法/数乘 3.3.1 标准的数乘对比 3.3.2 其他数乘对比 3.4 乘法 4 初等线性变换的不同 4.1 对矩阵进行线性变换 4.2 对行列式进行线性变换呢&#xf…

平衡二叉树的插入和删除(从现在开始摆脱旋转)

平衡二叉树是指任意节点的左子树和右子树高度之差的绝对值不超过1 一.插入操作 1.找到合适位置插入 2.从下到上&#xff0c;沿着插入节点与根节点的连线&#xff0c;找到不平衡的二叉树 以68为根节点的二叉树平衡&#xff0c;左右子树高度差为1 以60为根节点的二叉树不平衡&a…

【NX】NX中将点从一个坐标系映射到另一个坐标系

直接上代码吧&#xff0c;主要是使用了UF_CSYS_map_point函数&#xff1a; bool CAMToolPathToolkit::MapPointThroughRootWork(const AUTUMOONMathPoint3d &iPt, AUTUMOONMathPoint3d &oPt, int nTransMethod) {// 将点坐标转换为工作坐标系下坐标double arrPointInp…

有限与无限游戏 | 真北荐书

2023佛山敏捷之旅暨DevOps Meetup志愿者为进行大会的组织与准备&#xff0c;每周三晚有一个例会。 例会前等人的时间&#xff0c;涌现出一个小的分享环节。今天分享这本书&#xff1a;《有限与无限游戏》。 大家选择成为志愿者&#xff0c;是一个无限游戏。而组织活动和完成各种…