当前位置: 首页 > news >正文

C语言第十一课--------操作符的使用与分类-------基本操作

作者前言

         作者介绍:

          作者id老秦包你会

简单介绍:

             喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨

                                个人主页::小小页面

                                  gitee页面:秦大大


                        一个爱分享的小博主 欢迎小可爱们前来借鉴
_______________________________________________________

______________________________________________________________________

目录

        操作符类别

        操作符的使用        

——————————————————————————————————

算术操作符

+    -   *   /   %

*   - +等操作符就跟数学的用法一样,这里先不讲,

/ 有两种用法,一种为整数除法,一种为小数除法

#include <stdio.h>
int main()
{int a = 20;printf("%d\n", a / 5);printf("%lf\n", a / 5.0);return 0;
}

%只能是两边只能是整数 

移位操作符(针对的是该数的补码)

<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。
这两类操作符主要是针对补码来进行的
下面我们来普及一下知识
整数在二进制中的表示中有三种形态分别是源码 、反码、补码
原码:按照数值的正负直接写出一个整数的二进制数,正数符号位为0,负数符号位为1
对于一个整数的在C语言中的大小是四个字节,即32bit 
对于有符号的整数来说,最高位的1位是符号位, 符号位为1 表示是负数, 符号位为10表示是正数
对于无符号整数(正数),所有位都是有效位, 0无符号位
反码:正数的反码和正数的原码相同,负数的反码符号位不变,其他位取反
补码::正数的补码和正数的原码相同,负数的补码是在反码的基础上加1

 

 计算机采用的就是取反,加1的套路

 

 C语言中,内存存一个整数是存它的补码,(整数在内存中存储的是补码),整数在计算的时候使用的也是补码

>>右移运算符

分类:1.逻辑右移

            2. 算术右移

这两种右移是由编译器决定的,不能由个人决定,vs编译器是算术右移

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

算术右移:

 根据你要移动的位数在最右边舍弃几位,并在最左端补上0,,而负数的,在最左端补上1

逻辑右移:

 根据你要移动的位数在最右边舍弃几位,并在最左端补上0

<<左操作符

你要移动的位数在最左边舍弃几位,并在最右端补上0,

位操作符(针对的是该数的补码)

& // 按位与
| // 按位或
^ // 按位异或
注:他们的操作数必须是整数。
        这个操作符也是对操作数的补码进行操作的
#include <stdio.h>
int main()
{int a = -5;int b = 3;printf("%d\n", a & b);printf("%d\n", a | b);printf("%d\n", a ^ b);return 0;
}

 & //按位与

跟数学的与相识,全为真才是真,两数对应的二进制位都为1才是1,其他都是0

-5 & 3==》00000000000000000000000000000011(补码)

| //按位或

跟数学的或相识,有真才是真,全假才为假,两数对应的二进制位只有有一个为1,才是1,全部为0才是0

-5 | 3==》1111111111111111111111111111010 (补码)==》10000000000000000000000000000101 (原码)

^ //按位异或

两数对应的值是一样的就为0,不同就为1

-5^3==>1111111111111111111111111111000(补码) ==》10000000000000000000000000001000(原码)

a^a=a

0^a=a

我们计算两数交互的时候可以利用这个方法来,可以少创建一个变量,这个方法的可读性不高,建议不要使用太多

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

需要注意的是,这些操作符适用于整形

赋值操作符

=

从右向左赋值


复合赋值符


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

这些的使用就跟  a = a+b===> a+=b是一样的效果

单目操作符

!是把真变成假,假变成真   变成假是0, 变成真是1

 &取地址,

* 解引用操作符

#include <stdio.h>int main()
{int a = 0;printf("%p\n", &a);int* p = &a;int arr[10];int* pa = arr;printf("%p\n", pa);printf("%p\n", &pa);*p = 15;//对p解引用操作,*p是通过p中存放的地址,找到p指向的对象,*p就是aprintf("%d\n", a);return 0;
}

sizeof计算结果返回size_t类型也就是unsigned int  (无符号整型) 输出格式是%zd

#include <stdio.h>
int main()
{int arr[10];printf("%zd\n", sizeof arr);printf("%zd\n", sizeof (arr));printf("%zd\n", sizeof (int));printf("%zd\n", sizeof arr / sizeof(int));return 0;
}

sizeof 不是函数,因为函数的引用的()不能省略,

是计算类型或者变量的大小,单位是字节

计算变量大小可以不写(),如果计算类型要保留()

~           对一个数的二进制按位取反(包括符号位)
#include <stdio.h>
int main()
{int a = 0;printf("%d\n", ~a);return 0;
}

结果为-1 ,0的补码为00000000000000000000000000000000,~0则是11111111111111111111111111111111,取反加1得到原码为10000000000000000000000000000001

也就是-1了
#include <stdio.h>
int main()
{int a = 2;printf("%d", a | (1 << 2));printf("%d", (a | (1 << 2)) & (1 << 2));return 0;
}

++、--都有两种用法,分别是前置和后置

++

前置++:先加1 再使用

后置++;先使用再加1

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

前置--:先减1 再使用

后置--;先使用再减1

#include <stdio.h>
int main()
{int a = 0;int b = --a;printf("a=%d  b=%d\n", a, b);b = a--; printf("a=%d  b=%d\n", a, b);return 0;
}
(类型)       强制类型转换
#include <stdio.h>
int main()
{int a = (int)3.14;printf("%d", a);return 0;
}

类型转换尽量能不使用就不使用

关系操作符

> 、>= 、< 、<= 、!=  (  用于测试 不相等 ” )、 ==    (   用于测试 相等 ”)
在编程的过程中 == = 不小心写错,导致的错误。

逻辑操作符

&&     逻辑与
||           逻辑或
#include <stdio.h>
int main()
{int a = 1;int b = 0;printf("%d", a && b);printf("%d", a || b);return 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;
}

使用&&时只要一方为假另一方就不用算了

使用|| 只要一边为真,另一方就不用算了

总结:

操作符展示到这里了,后面还有一篇介绍下面的,有不懂的小可爱可以私聊我

相关文章:

C语言第十一课--------操作符的使用与分类-------基本操作

作者前言 作者介绍&#xff1a; 作者id&#xff1a;老秦包你会&#xff0c; 简单介绍&#xff1a; 喜欢学习C语言和python等编程语言&#xff0c;是一位爱分享的博主&#xff0c;有兴趣的小可爱可以来互讨 个人主页::小小页面 gitee页面:秦大大 一个爱分享的小博主 欢迎小可爱们…...

2,继承、内联函数、虚继承、友元、构造析构函数、初始化列表

继承 2.1结构体成员权限2.1.1访问权限2.1.2类与结构体 2.2类的成员函数2.2.1类内规则2.2.2类成员内联函数inline 2.3类的继承2.3.1类的继承与成员函数2.3.2类的多继承2.3.2.1类的多继承&#xff1a;菱形问题提出 2.3.3类的虚继承&#xff08;关键字virtual&#xff09; 2.4友元…...

Mkdocs中利用Js实现大小圈鼠标拖动样式

在docs/javascripts/extra.js下复制粘贴&#xff1a; var CURSOR;Math.lerp (a, b, n) > (1 - n) * a n * b;const getStyle (el, attr) > {try {return window.getComputedStyle? window.getComputedStyle(el)[attr]: el.currentStyle[attr];} catch (e) {}return …...

pytorch(6)——神经网络基本骨架nn.module的使用

1 神经网络框架 1.1 Module类的使用 NN (Neural network): 神经网络 Containers: 容器 Convolution Layers: 卷积层 Pooling layers: 池化层 Padding Layers: 填充层 Non-linear Activations (weighted sum, nonlinearity): 非线性激活 Non-linear Activations (other): 非线…...

论文精读之BERT

目录 1.摘要&#xff08;Abstract&#xff09; 2.引言&#xff08;Introduction&#xff09;&#xff1a; 3.结论&#xff08;Conlusion&#xff09;&#xff1a; 4.BERT模型算法: 5.总结 1.摘要&#xff08;Abstract&#xff09; 与别的文章的区别是什么:BERT是用来设计去…...

实战:Docker+Jenkins+Gitee构建CICD流水线

文章目录 前言Jenkins部署创建Jenkins docker-compose配置maven源启动Jenkins容器安装插件Gitee ssh公匙配置与测试项目提交 Jenkins创建流水线写在最后 前言 持续集成和持续交付一直是当下流行的开发运维方式&#xff0c;CICD省去了大量的运维时间&#xff0c;也能够提高开发…...

7.25 Qt

制作一个登陆界面 login.pro文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on …...

P1420 最长连号

题目描述 输入长度为 n n n 的一个正整数序列&#xff0c;要求输出序列中最长连号的长度。 连号指在序列中&#xff0c;从小到大的连续自然数。 输入格式 第一行&#xff0c;一个整数 n n n。 第二行&#xff0c; n n n 个整数 a i a_i ai​&#xff0c;之间用空格隔开…...

UVA-1354 天平难题 题解答案代码 算法竞赛入门经典第二版

GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题需要&#xff1a; 1. 遍历二叉树的每种构成方式。我这里每次把当前所有结点列出&#xff0c;然后遍历选取两个组合构成一个新结点&#xff0c;原来的结点剔除&#xff0c;新结点加入。…...

电机故障诊断(python程序,模型为CNN结合LSTM)

代码运行环境要求&#xff1a;TensorFlow版本>2.4.0&#xff0c;python版本>3.6.0 运行效果视频&#xff1a;电机故障诊断&#xff08;python代码&#xff09;_哔哩哔哩_bilibili 1.电机常见的故障类型有以下几种&#xff1a; 轴承故障&#xff1a;轴承是电机运转时最容…...

ubuntu 20.04 rtc时间显示问题探究

1、硬件与软件 本次测试的硬件为RK3568芯片&#xff0c;操作系统为ubuntu 20.04。 2、RTC与系统时间 先说结果&#xff0c;如果RTC驱动不可用或者RTC内部存储的时间非法&#xff0c; 那么操作系统会存储上一次有效的时间&#xff0c;当再次上电时&#xff0c;date命令会使用存储…...

数值分析第七章节 用Python实现非线性方程与方程组的数值解法

参考书籍&#xff1a;数值分析 第五版 李庆杨 王能超 易大义编 第7章 非线性方程与方程组的数值解法 文章声明&#xff1a;如有发现错误&#xff0c;欢迎批评指正 文章目录 迭代法求解 x e x − 1 0 xe^x-10 xex−10牛顿法求解 x e x − 1 0 xe^x-10 xex−10简化牛顿法求解 …...

利用MATLAB制作DEM山体阴影

在地理绘图中&#xff0c;我们使用的DEM数据添加山体阴影使得绘制的图件显得更加的美观。 GIS中使用ArcGIS软件就可以达到这一目的&#xff0c;或者使用GMT&#xff0c;同样可以得到山体阴影的效果。 本文提供了一个MATLAB的函数&#xff0c;可以得到山体阴影。 clear all;c…...

ubuntu 使用 rsync 的 SSH 方式同步备份远程WEB服务器

ubuntu 20.04 自带 rsync &#xff0c;对于 WEB 服务器这种更新频率不高的情况&#xff0c;直接使用定时同步复制远程服务器的方法&#xff0c;比较直接和简单&#xff01; $ rsync --version rsync version 3.1.3 protocol version 31 参考&#xff1a; Ubuntu20.04中的rsyn…...

机器学习 | Python实现NARX模型预测控制

机器学习 | Python实现NARX模型预测控制 目录 机器学习 | Python实现NARX模型预测控制效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 机器学习 | Python实现NARX模型预测控制 研究内容 贝叶斯黑盒模型预测控制,基于具有外源输入的非线性自回归模型的预期自由能最…...

M5ATOMS3基础03给ROS1发一个问候(rosserial)

引出问题 关于之前2020年的博客&#xff1a; 01. ESP8266和ROS调试一些问题汇总 02. ESP8266和ESP32配置&#xff08;需使用ROS1和ROS2&#xff09; 效果展示 使用M5ATOMS3与ROS1&#xff08;kinetic&#xff0c;melodic&#xff0c;noetic&#xff09;版本通信比较通用的是…...

基于Vue3实现鼠标按下某个元素进行移动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能

其原理主要是利用JavaScript中的鼠标事件来控制CSS样式。大致就是监听某个DOM元素的鼠标按下事件&#xff0c;以及按下之后的移动事件和松开事件。在鼠标按下且移动过程中&#xff0c;可实时获得鼠标的X轴坐标的值&#xff0c;通过简单计算&#xff0c;可计算出目标元素的宽度&…...

使用MyBatis(2)

目录 一、定义接口、实体类、创建XML文件实现接口&#xff09; 二、MyBatis的增删改查 &#x1f345;1、MyBatis传递参数查询 &#x1f388;写法一 &#x1f388;写法二 &#x1f388;两种方式的区别 &#x1f345;2、删除操作 &#x1f345;3、根据id修改用户名 &#x…...

【FPGA/D6】

2023年7月25日 VGA控制器 视频23notecodetb 条件编译error时序图保存与读取&#xff1f;&#xff1f;RGBTFT显示屏 视频24PPI未分配的引脚或电平的解决方法 VGA控制器 视频23 note MCU单片机 VGA显示实时采集图像 行消隐/行同步/场同步/场消隐 CRT&#xff1a;阴极射线管 640…...

【WebGIS实例】(10)Cesium开场效果(场景、相机旋转,自定义图片底图)

效果 漫游效果视频&#xff1a; 【WebGIS实例】&#xff08;10&#xff09;Cesium开场效果&#xff08;场景、相机 点击鼠标后将停止旋转并正常加载影像底图&#xff1a; 代码 可以直接看代码&#xff0c;注释写得应该比较清楚了&#xff1a; /** Date: 2023-07-28 16:21…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...