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

news2024/9/30 7:17:36

作者前言

         作者介绍:

          作者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就是a
	printf("%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;
}

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

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

总结:

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

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

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

相关文章

解决 tensorflow 出现的 ImportError: Could not find the DLL(s) ‘msvcp140_1.dll‘. 问题

在安装完tensorflow库后出现 问题详述&#xff1a; ImportError: Could not find the DLL(s) msvcp140_1.dll. TensorFlow requires that these DLLs be installed in a directory that is named in your %PATH% environment variable. You may install these DLLs by downlo…

JSP 文件上传

JSP 可以与 HTML form 标签一起使用&#xff0c;来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。 本章节我们使用 Servlet 来处理文件上传&#xff0c;使用到的文件有&#xff1a; upload.jsp : 文件上传表单。 message.jsp : 上传成功后跳转页…

超聚变和厦门大学助力兴业银行构建智慧金融隐私计算平台,助力信用卡业务精准营销...

兴业银行与超聚变数字技术有限公司、厦门大学携手&#xff0c;发挥产学研用一体化整体优势联合建设&#xff0c;厦门大学提供先进的算法模型及科研能力&#xff0c;超聚变提供产品解决方案及工程能力&#xff0c;兴业银行提供金融实践能力&#xff0c;三方发挥各自领域优势&…

RTPS规范v2.3(中文版)

实时发布订阅协议 DDS互操作性有线协议 &#xff08;DDSI-RTPS&#xff09; 技术规范 V2.3 &#xff08;2019-04-03正式发布&#xff09; https://www.omg.org/spec/DDSI-RTPS/2.3/PDF   目 录 0. 序言&#xff08;关于对象管理组&#xff09; 4 0.1 OMG 4 0.2 OMG规…

C++之浅拷贝和深拷贝总结(一百七十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【SLAM】A-LOAM 算法部署与测试(Win10 + VMWare + Ubuntu18.04)

基础环境 ubuntu及ROS安装&#xff0c;略&#xff1b;安装完ROS以后&#xff0c;默认已经安装好了PCL和Eigen库&#xff1b; 安装Ceres 下载Ceres源文件&#xff1a;&#xff08; Vmware没有网络&#xff0c;到下面的网址手动下载安装包 &#xff09; - https://github.com…

MyBatis-Plus自定义sql注入器

文章目录 一、前言二、MyBatis-Plus自定义sql注入器功能实现2.1、编写自定义sql类2.2、将自定义sql添加到BaseMapper中2.3、编写自己的sql注入器 一、前言 在日常开发过程中&#xff0c;我们可能会发现 MyBatis-Plus 提供的那些自带的 sql 语句无法满足我们的开发需求&#xf…

Java中注解应用场景

1.Parameter注解 Parameter(names "-browser", description "browser name, supported scope [chrome]", required true) Param注解的用法解析_parameter_fFee-ops的博客-CSDN博客 Public User selectUser(param(“userName”) String name, param(“…

C# Solidworks二次开发:向量相关的数学函数API的使用介绍

今天要讲的是Solidworks二次开发时候&#xff0c;如何使用一些与数学相关的API方法的介绍&#xff0c;在Solidworks中本身提供了一个函数用于对数学对象的访问&#xff0c;函数名为MathUtility。借助这个函数&#xff0c;我们来引出今天要介绍的几个API。 &#xff08;1&#…

剑指 Offer. 二叉树的镜像

请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 镜像输出&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 代码如下&#xff1a; class Solution { public:Tre…

android下的app性能测试应主要针对那些方面,如何开展?

如何开展安卓手机下的App性能测试&#xff0c;对于优秀的测试人员而言&#xff0c;除了要懂得性能测试的步骤流程外&#xff0c;还应该懂的性能测试的一些其他知识&#xff0c;比如性能测试指标、各指标的意义&#xff0c;常用的性能测试工具、如何查看结果分析等等知识。所以本…

P1535 [USACO08MAR] Cow Travelling S(dfs+剪枝 or 记忆化搜索)

1:本题暴力做法简单&#xff0c;重点在于我们如何剪枝&#xff1a; :《曼哈顿距离》我们每走一个点就判断&#xff0c;当前点到终点的最短步数是不是小于当前剩余的步数&#xff0c; 如果大于就肯定不符合直接return,或者当步数为0时&#xff0c;当还没到达终点&#xff0c;那…

web流程自动化详解

今天给大家带来Selenium的相关解释操作 一、Selenium Selenium是一个用于自动化Web浏览器操作的开源工具和框架。它提供了一组API&#xff08;应用程序接口&#xff09;&#xff0c;可以让开发人员使用多种编程语言&#xff08;如Java、Python、C#等&#xff09;编写测试脚本&…

JavaWeb+jsp+Tomcat的叮当书城项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88123111?spm1001.2014.3001.5503 技术&#xff1a;ssm jsp JDK1.8 MySQL5.7 Tomcat8.3 源码数据库课程设计 功能&#xff1a;管理员与普通用户和超级管理员三个角色&#xff0c;管理员可…

C++笔记之vector的底层实现和扩容机制

C笔记之vector的底层实现和扩容机制 1. 先申请内存空间&#xff0c;内存空间容量变成原来的n倍(一般是原来的两倍) 2. 将原本容器中的数据拷贝到新的内存空间中 3. 释放原来的内存空间 4. 将数组指针指向新容器的内存空间 code review! 文章目录 C笔记之vector的底层实现和扩…

VS+QT+PCL点云显示转网格表面体窗体实现

程序示例精选 VSQTPCL点云显示转网格表面体窗体实现 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQTPCL点云显示转网格表面体窗体实现>>编写代码&#xff0c;代码整洁&…

郑州主域名和多个子域名的泛域名https证书

随着网络的发展&#xff0c;一个站长往往会创建多个域名网站&#xff0c;为了与主站有联系&#xff0c;站长会选择主站域名的二级域名来创建网站&#xff0c;比如主站是www .***. com&#xff0c;那么新创建的网站的域名就是top .***. com、vip .***. com等。 1.在安装部署htt…

在Linux中用strsignal函数输出对各种信号的描述

2023年7月29日&#xff0c;周六上午 目录 函数原型Linux有多少种信号使用示例 函数原型 #include <string.h>char* strsignal(int signum);strsignal函数接受一个整数参数signum&#xff0c;表示信号的编号。 用于把信号编号转换成一个简短的对这个信号编号的描述。 L…

建设数据中台到底有啥用?

最近专注在数据和人工智能领域&#xff0c;从数据仓库、商业智能、主数据管理到大数据平台的建设&#xff0c;经过很多项目的沉淀和总结&#xff0c;最后我和团队一起总结了精益数据创新的体系。一直战斗在企业信息化一线。 企业为什么要建设数据中台&#xff0c;数据中台对于…

Windows文件夹浏览器Q-Dir

Windows自带的文件夹&#xff0c;没有标签分页功能&#xff0c;当打开多个文件夹时&#xff0c;需要来回切换窗口&#xff0c;比较繁琐。     这里介绍一款可以快速切换Windows文件夹的小工具:Q-Dir&#xff0c;当打开Q-Dir时&#xff0c;默认是4个窗口显示。QDir支持窗口里的…