C基础-操作符详解

news2024/11/25 8:23:25

操作符分类:

算数操作符:+ - * / %

//算数操作符
// int main()
// {
//     //   /除法 1.整数除法(除号两端都是整数)  2浮点数除法,除号的两端只要有一个小数就执行小数除法
//     // 除法中,除数为0
//     int a = 7 / 2;
//     printf("%d\n",a); //3
//     double b = 7 / 2;
//     printf("%lf\n",b); //3.000000
//     double c = 7 / 2.0;
//     printf("%lf\n",c); //3.500000
//     int d = 0;
//     int e = 5 / d; //除数不可为0,编译器会报错

//     printf("%d\n",e);

//     return 0;
// }

int main()
{
    int a = 17 % 8; //% 得到数整数的余数
    //int b = 17.0 % 8.0; // %取模操作符的两个操作数必须都是整数才行
    printf("%d\n",a);

    return 0;
}

移位操作符:<< >>

//移位操作符
//  <<左移操作符
//  >>右移操作符
//注意:以为操作符的操作数只能是整数  移动的是二进制
int main()
{
    //int a = 15;//00000000000000000000000000001111 -原码   //00000000000000000000000000001111 -反码 //00000000000000000000000000001111 -补码
    //int c = -15; //10000000000000000000000000001111 -原码 //11111111111111111111111111110000 -反码(原码的符号位不变,其他位按位取反) 11111111111111111111111111110001 -补码(反码+1就是补码)
    //int b = a >> 1;//移动的就是a中的二进制信息 //0000000000000000000000000000111 -  7
    //右移:算术右移(右边丢弃,左边直接补原来的符号位)  逻辑右移(右边丢弃,左边直接补0)
    // C语言没有明确规定是算术右移还是逻辑右移
    //int c = a << 1;//00000000000000000000000000011110
    //整数的二进制表示形式 : 原码 反码 补码 
    //正整数的原码、反码、补码是相同的
    //负的整数原码、反码、补码是要计算的
    //首先不管是正整数还是负整数都可以写出二进制原码  1.根据正负直接写出的二进制序列就是原码
    //1个整型是4个字节 = 32bit位
    //整数在内存中存储的是补码
    //计算的时候也是使用补码计算的
    // printf("%d\n",b); //7
    // printf("%d\n",c); //30

    // int d = -15; //10000000000000000000000000001111
    // int e = d >> 1;//11111111111111111111111111110001  ->  11111111111111111111111111111000 -> 11111111111111111111111111110111   ->00000000000000000000000000001000
    // printf("%d\n",e);

    //!移位操作符不要移负数哦
    int a = 6;// 110
    int b = a << 1;//1100
    printf("%d\n",b); //12

    return 0;
}

位操作符:& | ^

//位操作符
//也是操作二进制位
// &
// int main()
// {
//     int a = 3; //00000000000000000000000000000011
//     int b = -5;//10000000000000000000000000000101  11111111111111111111111111111010 补码11111111111111111111111111111011
//     int c = a & b;
//     // & --  对应二进制位,有0则为0,两个同时为1才是1
//     //00000000000000000000000000000011
//     //11111111111111111111111111111011
//     //00000000000000000000000000000011  -补码

//     printf("%d\n",c); //3

//     return 0;
// }


//|
// int main()
// {
//     int a = 3; //00000000000000000000000000000011
//     int b = -5;//10000000000000000000000000000101  11111111111111111111111111111010 补码11111111111111111111111111111011
//     int c = a | b;
//     // | --  对应二进制位,有1则为1,两个同时为0才是0
//     //00000000000000000000000000000011
//     //11111111111111111111111111111011
//     //11111111111111111111111111111011  -补码
//     //11111111111111111111111111111010
//     //10000000000000000000000000000101 -5
//     printf("%d\n",c); //-5

//     return 0;
// }

//^
int main()
{
    int a = 3; //00000000000000000000000000000011
    int b = -5;//10000000000000000000000000000101  11111111111111111111111111111010 补码11111111111111111111111111111011
    int c = a ^ b;
    // ^ --  对应二进制位,相同为0,相异为1
    //00000000000000000000000000000011
    //11111111111111111111111111111011
    //11111111111111111111111111111000  -补码
    //11111111111111111111111111110111
    //10000000000000000000000000001000
    printf("%d\n",c); //-8

    return 0;
}

//不能创建临时变量,实现两个整数的交换
int main()
{
    int a = 3;
    int b = 5;
    printf("交换前: a=%d b=%d\n",a,b);
    // int tmp = a;
    // a = b;
    // b = tmp;

    // a = a + b;
    // b = a - b;
    // a = a - b;   超过整形最大存储则不行

    //a ^ a -> 0
    //a ^ 0 = a
    // 异或是支持交换律的
    //a ^ b ^ a = 5
    //a ^ a ^ b = 5
    a = a ^ b;
    b = a ^ b; // b = a ^ b ^ b = a
    a = a ^ b;// a = a ^ b ^ a = b
    printf("交换后: a=%d b=%d\n",a,b);


    return 0;
}

编写代码实现:求一个整数存储在内存中的二进制中1的个数

//编写代码实现:求一个整数存储在内存中的二进制中1的个数
//方法1
// int main()
// {
//     //整数有32个bit位
//     //获得32个bit位的每一位,
//     //判断这一位是否为1
//     //是1就是记数器+1
//     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 = 10;
    int i = 0;
    int count = 0;
    for(i=0;i<32;i++)
    {
        if (num & (1 << i))
        {
            count++;
        }
    }
    printf("二进制中1的个数 = %d\n",count);
    return 0;
}

赋值操作符: = +=  -=  *= /= ....

单目操作符: ! sizeof + -  ~ & *

关系操作符: > < >= <= == !=

逻辑操作符:&&  ||

条件操作符:? :

逗号表达式 :    ,

下标引用,函数调用和结构成员:  []. ().  .  ->  

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

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

相关文章

06目标检测-One-stage的目标检测算法

一、 One-stage目标检测算法 使用CNN卷积特征直接回归物体的类别概率和位置坐标值&#xff08;无region proposal&#xff09;准确度低&#xff0c;速度相对two-stage快 二、One-stage基本流程 输入图片------对图片进行深度特征的提取&#xff08;主干神经网络&#…

go初识iris框架(七) - 实战资源导入和项目框架搭建

实战项目框架搭建 如下是项目框架搭建后的说明&#xff1a; config:&#xff1a;项目配置文件及读取配置文件的相关功能controller:控制器目目录,项目各个模块的控制器及业务逻辑处理的所在目录datasource:实现mysql连接和操作、封装操作mysql数据库的目录。model:数据实体目…

解决stable diffusion webui1.6 wd1.4 tagger加载失败的问题

由于webui源码的变化&#xff0c;需要修改两个地方的import 1.tagger/ui.py # 第十行 # from webui import wrap_gradio_gpu_call # 原代码 from modules.call_queue import wrap_gradio_gpu_call1.preload.py # 第4行开始 # from modules.shared import models_path # 原…

Jenkins List Git Branches插件 构建选择指定git分支

List Git Branches Parameter | Jenkins pluginAdds ability to choose from git repository revisions or tagshttps://plugins.jenkins.io/list-git-branches-parameter/ 1、安装组件 List Git Branches 2、验证功能 1&#xff09;新建任务 2&#xff09;新增构建参数 3&…

第7章_freeRTOS入门与工程实践之模块使用说明与STM32CubeMX配置

本教程基于韦东山百问网出的 DShanMCU-F103开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id724601559592 配套资料获取&#xff1a;https://rtos.100ask.net/zh/freeRTOS/DShanMCU-F103 freeRTOS系列教程之freeRTOS入…

潍坊科技学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

潍坊科技学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

每日一博 - 闲聊Https工作原理

文章目录 HTTPS工作原理数据的加密和解密与HTTP相比&#xff0c;HTTPS增加了多少性能开销&#xff1f;Flow小结 HTTPS工作原理 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 Hypertext Transfer Protocol&#xff08;HTTP&#xff09;的扩展。HTTPS使用…

分类预测 | Matlab实现基于BP-Adaboost数据分类预测

分类预测 | Matlab实现基于BP-Adaboost数据分类预测 目录 分类预测 | Matlab实现基于BP-Adaboost数据分类预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于BP-Adaboost数据分类预测&#xff08;Matlab完整程序和数据&#xff09; 2.多特征输入…

mianshiyan资料汇总(整理后)

前端优化方式 css3特性, [html5的特性](https://blog.csdn.net/qq_53472371/article/details/121881111) flex, 移动端开发, 各种居中 反爬虫&#xff0c;加密&#xff0c;前端攻击&#xff0c;跨域 cookie session jwt相关 前端优化方式 Turbopack WebComponentes6的新特性 B…

TRT4-trt-integrate -self-driving道路分析

1#先看ONNX 查看大概结构 首先我们来看一下这个onnx&#xff1a; 可以看到这是一个全卷积网络&#xff0c;因为输入输出的宽高都一样 后来的这里是加入了softmax&#xff0c;所以获得的是概率值&#xff0c;所以最终的输出output是1*512*596*4的概率值。仅仅是不确定四个通道代…

关于生产企业原材料的订购与运输问题

之前学校培训时候练习过的数学建模练习题&#xff0c;发出来分享一下~

《C++ Primer》第3章 字符串、向量和数组(一)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 3.1 命名空间的using声明&#xff08;P74&#xff09; 作用域操作符 :: 表示从左侧名字所示的作用域中寻找右侧名字&#xff0c;因此 std::cin 的意思就是使用命名空间 std 中的 cin 。 为了方便并安全地使…

JAVA -华为真题-分奖金

需求: 公司老板做了一笔大生意&#xff0c;想要给每位员工分配一些奖金&#xff0c;想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序&#xff0c;每个人随机抽取一个数字。按照工号的顺序往后排列&#xff0c;遇到第一个数字比自己数字大的&#xff0c;那么&#xf…

【IoT】生产制造:锅仔片上机做 SMT 加工吗?

目录 简介 锅仔片 简介 由于最近做产品用到了锅仔按键&#xff0c;由于单品用量过多&#xff0c;但是成品锅仔按键价格又太高&#xff0c;不适合量产。 这个时候就想到了锅仔片&#xff0c;问题又来了&#xff0c;锅仔片是否可以上机呢&#xff1f; 答案是肯定的。 锅仔片…

Pytest系列-使用自定义标记mark

简介 pytest 可以支持自定义标记&#xff0c;自定义标记可以把一个 web 项目划分为多个模块&#xff0c;然后指定模块名称执行 Pytest 里面自定义标记 用法&#xff1a;将pytest.mark.标记名称 放到测试函数或者类上面 使用&#xff1a; 执行时加上 -m 标记名 进行用例筛选…

K8S:Yaml文件详解及编写示例

文章目录 一.Yaml文件详解1.Yaml文件格式2.YAML 语法格式 二.Yaml文件编写及相关概念1.查看 api 资源版本标签2.yaml编写案例&#xff08;1&#xff09;相关标签介绍&#xff08;2&#xff09;Deployment类型编写nginx服务&#xff08;3&#xff09;k8s集群中的port介绍&#x…

Revit SDK 介绍:TraverseSystem 用广度遍历的方式遍历MEP系统

前言 这个例子介绍了用广度遍历的方式遍历MEP系统。 内容 打开 Revit 自带例子&#xff0c;选择红框中的某条风管&#xff0c;不要选择机械&#xff0c;图中选中只是为了和遍历结果对应&#xff1a; 红色区域到风管机的遍历结果&#xff1a; 核心逻辑 遍历逻辑主函数&am…

Visual Studio将C#项目编译成EXE可执行程序

经常看文章时会收获不少实用工具&#xff0c;有的在github上是编译好的&#xff0c;有的则是未编译的项目文件。所以经常会使用Visual Studio编译项目文件成exe可执行程序&#xff0c;以下为编译的流程。 第一步&#xff0c;从github上下载项目文件&#xff0c;举个例子&#…

解决`SQLyog Trial`试用到期的问题(提供一个脚本解决方案)

文章目录 一、要删除的注册表项二、写了个脚本干这个事儿三、最后 本文将总结SQLyog Trial试用到期的问题。 其实解决起来很简单&#xff0c;就是将SQLyog相关注册表删掉即可 一、要删除的注册表项 WinR打开运行&#xff0c;输入regedit回车&#xff0c;打开注册表 在HKEY_C…

基于Elasticsearch的多文档检索 比如 商品(goods)、案例(cases)

概述 Elasticsearch多文档聚合检索 详细 记得把这几点描述好咯&#xff1a;需求&#xff08;要做什么&#xff09; 代码实现过程 项目文件结构截图 演示效果 应用场景 我们需要在五种不同的文档中检索数据。 比如 商品&#xff08;goods&#xff09;、案例&#xff08;ca…