运算符与表达式初学

运算符与表达式,你是真的多

一.运算符与表达式

单目运算符:只能对一个计算量进行运算的符

双目运算符:需要对两个计算量进行运算

三目运算符:条件运算符(?:)

不同运算符的优先级不同,先乘除后加减

如果优先级相同,那么从左往右结合

结合方法规律:

   1.单目运算符,结合与算符和条件运算符是右结合性,

优先级规律:

    2.单目高于双目,双目高于三目,三目高于赋值

       双目优先级:算术运算符>移位运算符>关系运算符>未逻辑运算符(不包括单目位逻辑运算符) >逻辑运算符

表达式求值:

  1. 先按优先级高低次序
  2. 按结合方向

二.算术

算术表达式:使用算术运算符和括号将运算量连接起来的式子

        算术运算符: * /(a/b:a除以b的商) %(a%b:a除以b的余数) + -

注意:两个实数相除的结果是双精度实数

      两个整数相除的结果为整数

      %要求参加运算的对象必须是整数,得到的结果必须为整数

 (关于除法运算)1/2=0  但是1.0/2=0.5,1.0/2.0=0.5.(只要两边有一个是双精度,那么结果就是实数)

               (类型不同的数进行运算,结果的类型按照类型优先级来决定)

#include<stdio.h>
int mian()
{
    printf("%a/b",%10/5);
}

  (关于求余数运算)

     有例子  

#include<stdio.h>
int main()                 
{
    printf("%d\n",5%3);
    printf("%d\n",5%-3);
    printf("%d\n",-5%3);
    printf("%d\n",-5%-3);
}

结论:结果与左边运算符正负保持一致

优先级() * 、/、 %    +  -

结合性:自左向右

例子:求混合运算的最终结果

#include<stdio.h>
#include<math.h>          //计算整型数的绝对值
int main()
{
    float a=2.0;
    int b=6,c=3;
    printf("%f\n",a*b/c-1.5+'a'+fabs(-5));
}

三.运算符与表达式之关系

关系表达式:用关系运算符连接的两个表达式构成。关系运算符实际上就是比较运算符 

注意:‘=’是赋值运算符,‘==’是关系运算符

关系运算符的结果只有0或1

当比较结果成立时,结果为1,不成立结果为0

优先级:(<,<=<,>=,>)高于(==,!=)

结合性:自左至右

求关系表达式的值:

#include<stdio.h>
int main()
{
    printf("%d\n",3>5);
    printf("%d\n",3<4>2);
    printf("%d\n",3+(4<3)*4);
    printf("%d\n",3+4<3*4);
}

 

 四.运算符表达式之逻辑

逻辑表达式:用逻辑运算符连接两个表达式构成。参与逻辑运算的操作数叫逻辑量。

逻辑量可以是整型、实型、字符型和指针类型等多种类型

逻辑非:!(就是取反)

逻辑与:&&

逻辑或:||

逻辑运算结果用数值1表示真,0表示假

逻辑运算中非零当做真,0作为假

运算符||两边只要有一个是1,那么运算结果就是1

运算符&&两边只要有一个是0,那么运算结果就是0

优先级:! >   &&>    ||

结合性:自左至右

第一个例子

#include<stdio.h>
int main()
{
    int a=0;b=1;
    c=a&&(b=3);
}

第二个例子

#include<stdio.h>
int main()
{
    int a=5;
    float b=3.5;
    printf("%d\n",!a);           //a是非0,就是真,取反就是假
    printf("%d\n",a&&b);     //a和b都是真,所以都是1,那么结果就是1
    printf("%d\n",!a&&!b);   // a和b的反都是0,结果为0
    printf("%d\n",!(a<b));    //a<b是假,反就是真
    printf("%d\n",!a&&b);
    printf("%d\n",!(a&&b));
}

书写:在数学上2X8

      在C中:2<=X  &&  X<=8

注意:如果&&左侧为假,则C不会判断右边。

      如果||左侧为真,C不会判断右侧

 .位运算

位运算是对整形数据进行的运算,而且符号位需要参与运算。

位运算主要用于编写系统软件,完成汇编语言能够完成的一些功能

&  按位与  3&5 1         转为二进制时两个都为1才能转为1   不同就是0

|   按位或  3|5            有1就是1

^   按位异或3^5 6        相同为假(0)相异为真(1)         

~  按位取反    ~3   -4     每个二进制要取反(补码)

<<  左移    3<<1   6    两个数字必须是整数,将a按照二进制向左移动n位,然后右边补0

>>   右移    3>>1  1     如果运算量有符号整数,那么补他的符号,如果无符号就补0

运算:现把整数转换为二进制再进行按位运算

然后把算到的二进制转为十进制

2^0=1, 2^1=2, 2^2=4, 2^3=8, 2^4=16, 2^5=32, 2^6=64, 2^7=128

3=2^1+2^0  就是 00000011

5=2^2+2^0       00000101

按位取反:00000011   按位取反变成变成-1111100(负数在计算机中已补码形式存在)

然后变成-00000111   (补码取反后,末位加1)

   #include<stdio.h>
int main()
{
    printf("%d\n",3&5);
    printf("%d\n",3|5);
    printf("%d\n",3^5);
    printf("%d\n",~3);
    printf("%d\n",3<<1);
    printf("%d\n",3>>1);
}

(位运算有点麻烦,还得换过来,数学不好的我流下了眼泪)

明天就把运算符学完了,很好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值