运算符的运用(急)

本文深入解析算术运算符、复合运算符、关系运算符、逻辑运算符和位运算的原理与实战应用,包括取整、除法、位与、位或、位异或等,助力理解编程中的运算逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.运算符:


    算术表达式:由运算对象和运算符构成;
    eg:10+20(10和20就是运算对象,+就是运算符)

2.算术运算符:


    类型:+ - * / % += -= /= %= *=
    注意:
    1./的取整:
    如果/的所有对象都是整数,/的功能就是取整
    eg: 5/3==1,5/2==2
    2./的除法运算
    如果/有一个是实型,/的功能就是除法运算
    eg:5/2.0==2.5;
    //可根据自身需要的功能合理使用

    3.%取余运算符(难点)


    eg:5%2==1;  3%5==3;(在不够除时,余数就是除数本身)
       进阶: n%3==0,1,2(可能产生的余数值)
       再进阶: data%n== 0,1,2,3...n-1;(可以产生n-1种余数值)(data是一个随机的数字,每次执行都会变化)(n是一个固定的值)
        案例:如果rand()函数产生一个随机数>0,请使用rand()产生60--100的随机数:
        分析:rand()能产生>0的随机数字,60--100可以被看成(60+0,60+40),也就是说我们需要产生一个(0,40)的数值
        根据上面进阶可知,用rand()%41=就可以产生(0,1,2,3....40)的任意数值,所以说代码就是:
        rand()%41+60;

2.复合运算符:


    类型:+= -= /= %=
    eg: a+=b //a=a+b
    注意:一定要将=号右边的看做整体运算
    eg: a*=4+5;//a=a*(4+5);(4+5)是一个整体
    运算的方向:从右往左:
    eg:a+=a-=a*=a;(假设a=4)
    先运算a*=a,a==16;(a=4*4)
    再运算a-=a,a==0;(a=16-16)
    后运算a+=a,a==0;(a=0+0)

3.关系运算符


    类型:<,>,==,<=,>=,!=
    用于判断运算对象之间的关系;
    eg:a<=b,....等等之类的

4.逻辑运算符:


    类型:&& || !
    1.&& 逻辑 "与":
    eg:A&&B 只有当AB表达式都为真的时候,整个表达式才为真,返回一个1
    若有任意一个假的就返回0;
    注意:逻辑与&&的短路特性:
    也就是说,假如A&&B中,A的表达式已经是假的了,就不会执行B的表达式,同时B的真假决定不了整个表达式的结果

    2.||逻辑或:
     eg:A||B 但A,B其中一个表达式为真的时候,整个表达式为真,返回一个1
    当A,B都为假时,整个表达式就为假,就返回0;
    注意:逻辑或||的短路特性和逻辑与&&的特性原理一样

    3.!逻辑非:
    !真==假; !假==真//使用方法?

插入知识点:rand()函数://观看rand函数笔记

5.位运算(二进制位运算)


    1.& 按位与
    语法:全1为1(两个1时才为1) 有0为0(有0就为0)
    特点:和1相与保持不变 和0相与为0
    运用场景:将指定位清0
    eg:  1100 0011
       & 1111 0000
       -------------//1100和1111相与所以保持不变,0011和0000相与全变成0
         1100 0000
    案例:date为一个字节,将data的第三和第4位清0,其他位保持不变(看到清0,就使用&)
    unsigned char data;
    data = data & 1110 0111;//位数是从0开始数的(顺序从右往左数),利用遇1不变,遇0为0,的特性进行清0操作
    //但是上面的写法是错误的,在c++中会把1110 0111看成一个十进制数字,所以我们应该要将其改为16进制
    data = data & 0xe7//ok
    data &= 0xe7; //2进位和16进制的转换笔记:

    2.| 按位或
    语法:有1为1 全0为0(两个0的时候才为0)
    特点:和1或-> 置1,和0或-> 保持不变
    运用场景:将指定位 置1
    eg:  1100 0011
       | 1111 0000
       --------------
         1111 0011
    案例:date为一个字节,将data的第三和第4位置1,其他位保持不变
        data = data | 0110 0000;
        data = data | 0x60;//ok
    
    3.~按位取反
    语法:0变1,1变0;(简单,相反就对了)
    eg: ~1111 0000==0000 1111

    4.^按位异或
    语法:相同为0 不同为1
    特点:和1异或取反 和0异或保持不变
    使用场景:将指定位 发生翻转
    eg: 1100 0011
       ^1111 0000
       -------------
        0011 0011
       ^1111 0000
       ------------
        1100 0011
 
    5.左移<<:左边丢弃,右边补0
    移动的位数不能超过 自身的宽度;
    data=1100 0011;data=data<<3;//意思是向左移动三位(尖端指向左边)
          |
    1 1 0 | 0 0 0 1 1 0 0 0(后面三位是补进来的)
          |
    例子:
    data=0000 0001 data=data<<0; data=0000 0001==1(10进制)==data*2^0;
    data=0000 0001 data=data<<1; data=0000 0010==2(10进制)==data*2^1;
    data=0000 0001 data=data<<2; data=0000 0100==4(10进制)==data*2^2;
    data=0000 0001 data=data<<3; data=0000 1000==8(10进制)==data*2^3;
    ......//一开始都是1;

    6.右移>>:右边丢弃 左边补0(补1)//补1还是补0,是由你的编译器决定
    其实只有当负数的时候编译器才会考虑补1还是补0;其他情况默认都是补0
    负数:右边丢弃 左边补0 (逻辑右移)
    负数:右边丢弃 左边补1 (算术右移)//是逻辑还是算术右移这些都是由编译器决定的,可以通过测试判断是那种运算
    
    data=1000 0000 data=data>>0; data=1000 0000==128(10进制)==data/2^0;
    data=1000 0000 data=data>>1; data=0100 0000==64(10进制)==data/2^1;
    data=1000 0000 data=data>>2; data=0010 0000==32(10进制)==data/2^2;
    data=1000 0000 data=data>>3; data=0001 0000==16(10进制)==data/2^3;
    //右移就是除法运算

6.三目运算符  ? :


    表达式1 ? 值1:值2
    如果表达式1为真,整个表达式的值为 值1(引用)
    如果表达式1为假,整个表达式的值为 值2(引用)
     eg: 10>20? 10:20 //输出结果为20(值2)
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不吃牛肉!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值