当前位置: 首页 > 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;
}

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

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

总结:

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

http://www.lryc.cn/news/100691.html

相关文章:

  • 2,继承、内联函数、虚继承、友元、构造析构函数、初始化列表
  • Mkdocs中利用Js实现大小圈鼠标拖动样式
  • pytorch(6)——神经网络基本骨架nn.module的使用
  • 论文精读之BERT
  • 实战:Docker+Jenkins+Gitee构建CICD流水线
  • 7.25 Qt
  • P1420 最长连号
  • UVA-1354 天平难题 题解答案代码 算法竞赛入门经典第二版
  • 电机故障诊断(python程序,模型为CNN结合LSTM)
  • ubuntu 20.04 rtc时间显示问题探究
  • 数值分析第七章节 用Python实现非线性方程与方程组的数值解法
  • 利用MATLAB制作DEM山体阴影
  • ubuntu 使用 rsync 的 SSH 方式同步备份远程WEB服务器
  • 机器学习 | Python实现NARX模型预测控制
  • M5ATOMS3基础03给ROS1发一个问候(rosserial)
  • 基于Vue3实现鼠标按下某个元素进行移动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能
  • 使用MyBatis(2)
  • 【FPGA/D6】
  • 【WebGIS实例】(10)Cesium开场效果(场景、相机旋转,自定义图片底图)
  • 【Spring】IOC的原理
  • AI加速游戏开发 亚马逊云科技适配3大场景,打造下一代游戏体验
  • C++ | 继承(基类,父类,超类),(派生类,子类)
  • Commands Of Hadoop
  • SQL-每日一题【620.有趣的电影】
  • linux 精华总结
  • Eureka 学习笔记2:客户端 DiscoveryClient
  • okhttp原理分析
  • freeswitch的mod_xml_curl模块
  • 高速数据采集专家-FMC140【产品手册】
  • 【SSM】知识集锦