C语言操作符基础知识图文详解

目录
  • 1.算术操作符
    • + - * /
    • %
  • 2.移位操作符
    • >> (右移操作符) <<(左移操作符)
      • 左移操作符:<<
      • 右移操作符:>>
  • 3.位操作符
    • 3.1 & 按位与
    • 3.2 | 按位或
    • 3.3 ^ 按位异或
    • 3.4 ~ 按位取反
  • 4.赋值操作符 =
  • 5.逻辑操作符
    • 5.1 ! 非
    • 5.2 && 与
    • 5.3 || 或
  • 6.条件运算符 ?
  • 7.单目操作符
    • 7.1 !
    • 7.2 + 正值
    • 7.3 - 负值
    • 7.4 & 取地址
    • 7.5 sizeof
    • 7.6 (强制类型转换)
    • 7.7 ++ --自增自减
    • 7.8 * 解引用
  • 8. 逗号表达式
  • 9. 关系操作符 == >= <= != > < =
    • 9.1 ==
    • 9.2 !=
    • 9.3 >= <=
  • 总结

前言

操作符在c语言中有着必不可缺的作用,它们能使一些算法变得简单,接下来就由我来为大家详细解说。

1.算术操作符

+ - * /

这4个运算符均可用于整型和浮点型的运算,但只有当两位数中一位时浮点型时,才能得出浮点型的结果。如: 3/2=1, 3/2.0=1.5。

%

取余数,经常用于控制一个数的范围。这个操作符的数必须为整数,如: 3%2=1,4%3=1。

2.移位操作符

>> (右移操作符) <<(左移操作符)

首先讲左移操作符,首先我们要知道电脑存储一个数字是以二进制形式存储的,而存储又分为原码,反码,补码,在电脑中存的是补码,打印出来的是原码。编译器有32位和64位的,我这里以32位做测试。关于原反补码我简单说,正数的原反补码都相同,原码的第一位为符号位,正数位0,负数位1.如下:

而二进制可以转化为16进制,就是我写的0x开头后面的数字,记住0x是16进制的标志,而后面的

可以分为8段每一段都是从右向左数,2^0,2^1,2^2,2^3.如果那位数是几就乘以它。

负数的反码与原码取反,0变1,1变0,但符号位不变。补码就是反码最后一位加1,满2进1.如下:

左移操作符:<<

知道了这些后,左移操作符就很简单了,就是左边丢弃右边补0,且操作的是补码

对于正数3如下:3<<1

它的作用相当于乘以了2,当然是移1位。也可以移多位,比如3<<2,3<<3等等。

ps-左移操作符和右移操作符移位时不能移负数位。比如:3<<-2,这是不行的。

右移操作符:>>

右移操作符就相对于来说较难了。

右移操作符可以分为逻辑右移和算术右移,逻辑右移就是右边丢弃,左边补0(和左移操作符有点类似);而算术右移就是右边丢弃,左边补符号位。下面是-2算术右移后的结果

它的作用相当于/2。

3.位操作符

3.1 & 按位与

同上述的移位操作符一样,位操作符也是操作一个数的补码。

比如-1的补码和-2的补码:令a=(-1)&(-2)

当两者都为1时才返回1,只要有一个时0就返回0。所有返回:

结果还是-2.

3.2 | 按位或

| 按位或操作符就是只要有一个是1,就返回1,全为0才返回0

比如-1和-2,按位或后结果还是-1

3.3 ^ 按位异或

^ 按位异或 是相同时返回0,不同时返回1.符号位也要变。

-1和-2,按位异或后结果为正1

3.4 ~ 按位取反

~ 按位取反 每个二进制位0变1 ,1变0。

结果为0.

4.赋值操作符 =

对一个变量进行赋值,比如int a;a=5;

5.逻辑操作符

5.1 ! 非

! 又是单目运算符,在逻辑运算中,优先顺序最高。非运算符的结果只能是1或者0.

在c语言中规定一切非0值等同于1.而非运算符就是使0变1,1变0.比如!1=0; !0=1。

5.2 && 与

&& 是并且的意思,当两边的操作数都为1时,返回结果位1,两者只要一个为0,结果就为0.

比如令a=1&&2,a的结果时1,a=0&&2,结果为0.

5.3 || 或

|| 操作符,当两个操作数只要有一个为1,返回结果就为1,全为0,返回结果为0.

6.条件运算符 ?

? 是c语言中唯一一个三目操作符,它连接三个运算量

一般形式为: 表达式1?表达式2:表达式3

当表达式1的结果为非0时,返回表达式2的值

当表达式1结果为0时,返回表达式3的值

如:

int a=2,b=3,c=4,d;
d=(a<b)?a:c;

7.单目操作符

7.1 !

详见5.1

7.2 + 正值

7.3 - 负值

7.4 & 取地址

c语言中,每个变量都有一个地址,该操作符用来获取变量在内存中的地址。一般形式为&变量名。

取地址符的运算对象只能是变量,他的运算结果是变量的存储地址,一个变量会占据多个字节,而每个字节都有地址,其中最小的地址代表变量地址。

7.5 sizeof

求字节长度比如求一个数组的字节大小会包含数组内的所有元素。

比如说这个图,数组arr是int类型的,而里面包含6个元素,所以他的字节长度为24,而arr[0]是一个int类型字节长度为4.看到第三个,你们想到了什么?没错,他能用来求一个数组内有多少个元素,因为总字节长度除以一个元素字节长度,不就能得到数组中总共有多少个元素嘛!

7.6 (强制类型转换)

可以将一个类型强制转换为另一个类型,一般形式(类型)变量或常量。

7.7 ++ --自增自减

这里自增自减又分为两种,前置++和后置++,如a++或++a,这两者是不同的,前者为先使用a再对a进行加1,后者为先加1再使用。简单举个例子:

c和d前置和后置的结果时不同的,虽然对于c和d的结果不同,但对a和b的操作都是加了1。

自减就和自增一样喽。

7.8 * 解引用

“引用”这个词,出现最多的场景就是:在文章或者注脚里,写上“引用(或摘自)某某作者某篇文章”,意思很明了,就是出现在本文的不是作者自己的话,而是别个作者的话,于是“引用”的意思就是拿过来用。还可以把“解引用”理解为“解码”。假设ptr里存放的是一个内存地址,那么*ptr就是这个内存地址里存放的数据。前面这个“*”的解引用操作,就可以理解为对这个ptr进行解码,解码得到的数据就是*ptr,也就是我们常说的“这个内存地址里存放的数据”或者“这个指针指向的数据”。“指针”的理解模式太容易混淆,而“解码”的理解模式更好记一点。

8. 逗号表达式

一般形式(表达式1,表达式2,表达式3,·······)

逗号表达式一般用来判断,他的运算结果时最后一个表达式,但并非就是说前面的表达式就不需要看了,因为他的执行顺序是从左往右。

就比如这个,由于我用了一个逗号表达式,因此循环停下来的条件是j小于4,但j一直等于0,又没有对其进行任何操作,所有它陷入了死循环,就会一直打印hehe。而在正常情况下:

再比如:

9. 关系操作符 == >= <= != > < =

> < =这几个操作符就不要多说了吧。

9.1 ==

测试是否等于,在判断字符串是否有相等的时,必须要用==,而不能用=。

在if语句中必须用==,而不能用=,=在c语言中是赋值,不能将它理解为数学中的等于。

9.2 !=

!= 不等于,也通常用于if语句中,来判断变量是否满足条件。

9.3 >= <=

大于或等于,小于或等于,也一般用于判断语句中。

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java AbstractMethodError原因案例详解

    背景 AbstractMethodError异常对于我来说还是比较不常遇见的,最近有幸遇到,并侥幸的解决了,在这里把此种场景剖析一番,进入正题,下面是AbstractMethodError在Java的异常机制中所处的位置: 现在明确了AbstractMethodError所具有的特性: 1.它是Error的子类,Error类及其子类都是被划分在非检查异常之列的,就是说这些异常不能在编译阶段被检查出来,只能在运行时才会触发. 2.通过API文档里面的解释大致得出的结论就是说A依赖于B,但是执行的时

  • 推荐一个好看Table表格的css样式代码详解

    漂亮的table表格样式css源码漂亮的table表格样式 源码 <head> <title></title> <style type="text/css"> table { border-collapse: collapse; margin: 0 auto; text-align: center; } table td, table th { border: 1px solid #cad9ea; color: #666; height:

  • C语言 TerminateProcess函数案例详解

    TerminateProcess 顾名思义,就是终止进程的意思. 是WindowsAPI的函数, 示例代码如下: // Demo.cpp : 定义控制台应用程序的入口点. //终止进程Demo #include "stdafx.h" using namespace std; //@param:dwpid:指定需要关闭的进程pid int CloseProcess(DWORD dwpid) { HANDLE hProcess = OpenProcess(PROCESS_TERMINATE

  • C++ ostream用法案例详解

    概述 在 C++中,ostream表示输出流,英文"output stream"的简称.在 C++中常见的输出流对象就是标准输出流cout,很少自定义ostream的对象,更多的是直接使用cout.那么 ostream 有什么用呢,来看一个场景: class CPoint { public: CPoint(int x_,int y_):x(x_),y(y_){} int x,y; }; 这里定义了一个简单的类CPoint,如果我们实例化该类过后,想要打印对象的值: CPoint poi

  • C# Console.WriteLine()用法案例详解

    以前用Console.WriteLine()的时候就只会用它直接输出string字符串,但后来发现它还有其它在有些场合下会十分方便的输出方法,这篇就记录一下这些方法的使用吧. 代码格式我就不写了,因为写了也不好理解,所以直接上示例了.  ① static void Main(string[] args) { int i = 6; string s = "输出"; Console.WriteLine("{0}还可以这样{1}哦.", i, s); Console.Wr

  • C语言 OutputDebugString与格式化输出函数OutputDebugPrintf案例详解

    OutputDebugString属于windows API的,所以只要是包含了window.h这个头文件后就可以使用了.可以把调试信息输出到编译器的输出窗口,还可以用DbgView(本机或TCP远程)这样的工具查看,这样就可以脱离编译器了.   OutputDebugString 默认只能输入一个参数,不能像printf那样格式化输出,下面改造成类似printf函数的输出方式. #include <windows.h> #include <stdio.h> //#include

  • VC使用TerminateProcess结束进程实例

    本文实例讲述了VC使用TerminateProcess结束进程的方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: int KillProcess(LPCSTR pszClassName, LPCSTR pszWindowTitle) {     HANDLE hProcessHandle;     ULONG nProcessID;     HWND TheWindow;     TheWindow = ::FindWindow( NULL, pszWindowTitle )

  • C语言中栈的两种实现方法详解

    目录 一.顺序栈 二.链式栈 总结 一.顺序栈 #include<stdio.h> #include<stdlib.h> #define maxsize 64 //定义栈 typedef struct { int data[maxsize]; int top; }sqstack,*sqslink; //设置栈空 void Clearstack(sqslink s) { s->top=-1; } //判断栈空 int Emptystack(sqslink s) { if (s-

  • C语言操作符基础知识图文详解

    目录 1.算术操作符 + - * / % 2.移位操作符 >> (右移操作符) <<(左移操作符) 左移操作符:<< 右移操作符:>> 3.位操作符 3.1 & 按位与 3.2 | 按位或 3.3 ^ 按位异或 3.4 ~ 按位取反 4.赋值操作符 = 5.逻辑操作符 5.1 ! 非 5.2 && 与 5.3 || 或 6.条件运算符 ? 7.单目操作符 7.1 ! 7.2 + 正值 7.3 - 负值 7.4 & 取地址 7.

  • C语言 操作符#与##使用方法详解

    目录 一.# 运算符 二.## 运算符 三.小结 一.# 运算符 # 运算符用于在预处理期将宏参数转换为字符串 # 的转换作用是在预处理期完成的,因此只在宏定义中有效 编译器不知道 # 的转换作用 用法: #define STRING(x) #x printf("%s\n",STRING(Hello World!)); 下面通过一个示例感受一下: test.c: #include <stdio.h> #define STRING(x) #x int main() { pri

  • C语言操作符基础知识详解

    目录 一.单目操作符: 二.关系操作符 三.条件操作符 四.逗号表达式 五.逻辑操作符 总结 一.单目操作符: !:逻辑反操作符: -:负数操作符: +:整数操作符: &:取地址操作符: sizeof:操作数的类型长度操作符: sizeof(数组名)--数组名表示整个数组,sizeof(数组名)求的是整个数组的大小,单位是字节 例如: int a[10] = { 0 }; printf("%d\n",sizeof(a)); suzeof(a[0]);-->(4) 不同的表

  • C语言MFC基础之计算器详解

    目录 基于MFC计算器(基础点) 需求:把计算器运算的过程呈现出来. 基础点 总结 基于MFC计算器(基础点) 主要是在实现MFC计算器的过程中碰到的一些问题,和补充的一些知识. 需求:把计算器运算的过程呈现出来. 想法:利用两个队列,一个存储输入的字符串(表达式),一个存放结果. 分别命名为queue1,和myqueue,让字符串从左到右依次入队列. 但之后按照自己的思路去推演,发现如果进入队列的是1+23,如果下一个字符入队的是"+",那么先计算23的结果入队myqueue中,而q

  • 深入mysql基础知识的详解

    1.每个客户端连接都会从服务器进程中分到一个属于它的线程.而该连接的相应查询都都会通过该线程处理. 2.服务器会缓存线程.因此并不会为每个新连接创建或者销毁线程. 3.当发起对MySQL服务器的连接时,服务器会对 username,host,password进行验证.而一旦连接上,服务器就会检测其权限. 4.MySQL查询缓存只会保存 SELECT 语句和相应的结果.在解析查询之前会询问查询缓存,如果查询缓存中能找到相应的结果就直接返回结果. 5.MySQL的 data 文件夹下会根据每个数据库

  • GO语言开发环境搭建过程图文详解

    一.GO语言开发包 1.什么是GO语言开发包 go 语言开发包其实是对go语言的一种实现,包括相应版本的语法, 编译, 运行, 垃圾回收等, 里面包含着开发 go 语言所需的标准库, 运行时以及其他的一些必要资源 2.GO语言开发包下载地址 Go官方下载地址 : https://golang.org/dl/ Go官方镜像站(上面打不开可使用这个) : https://golang.google.cn/dl/ Go语言中文网下载地址 : https://studygolang.com/dl gop

  • Go语言基础反射示例详解

    目录 概述 语法 一.基本操作 二.修改目标对象 三.动态调用方法 总结 示例 概述 在程序运行期对程序动态的进行访问和修改 reflect godoc: https://golang.org/pkg/reflect/ reflect包有两个数据类型: Type:数据类型 [reflect.TypeOf():是获取Type的方法] Value:值的类型[reflect.ValueOf():是获取Value的方法] 语法 一.基本操作 获取变量类型 func TypeOf(i interface{

  • 图文详解go语言反射实现原理

    Go反射的实现和 interface 和 unsafe.Pointer 密切相关.如果对golang的 interface 底层实现还没有理解,可以去看我之前的文章: Go语言interface底层实现 , unsafe.Pointer 会在后续的文章中做介绍. (本文目前使用的Go环境是Go 1.12.9) interface回顾 首先我们简单的回顾一下interface的结构,总体上是: 细分下来分为有函数的 iface 和无函数的 eface (就是 interface{} ); 无函数的

  • Go语言并发编程基础上下文概念详解

    目录 前言 1 Go 中的 Context 2 Context 接口 3 Context Tree 4 创建上下文 4.1 上下文创建函数 4.2 Context 使用规范 4.3 Context 使用场景 5 总结 前言 相信大家以前在做阅读理解的时候,一定有从老师那里学一个技巧或者从参考答案看个:结合上下文.根据上下文我们能够找到有助于解题的相关信息,也能更加了解段落的思想. 在开发过程中,也有这个上下文(Context)的概念,而且上下文也必不可少,缺少上下文,就不能获取完整的程序信息.那

  • Windows系统中搭建Go语言开发环境图文详解

    目录 1.Go语言简介 2.安装Git 3.Go 工具链(编译器)安装 3.1.环境变量GOROOT 3.2.环境变量GOPATH 3.3.Go常用命令 4.包管理 4.1.go module 4.2.gopm 5.编写Go语言代码的IDE或编辑工具 5.1.基于VSCode的Go开发环境 5.1.1.安装VSCode 5.1.2.安装插件 5.1.3.常用配置 5.2.GoLand 5.3.Vim 5.4.其他Go代码编写工具 6.Go语言学习资料分享 本文详细讲述如何在 Windows 系统

随机推荐