C语言学习:运算符

运算符包括:赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符(三元运算符) 

一、赋值运算符
变量=表达式
例:height = 198.6
       x = a+b;
       a=b=c=8;

二、算术运算符
加法运算符:+ 双目运算符,如:a+b
减法运算符:-  既是双目又是单目运算符,如:-7,9-7
乘法运算符:* 双目运算符
除法运算符:/  参与运算量若都为整型,那么结果也是整型(取整向0的方向)。-5/3==-1
                         如果其中有一个实型,则结果为双精度。
                         除数不能为0,否则会发生中断。
模运算符:%   双目运算符。7%3==1

三、关系运算符
>       <        >=        <=        ==        !=

例1:若b在a、c之间,则...
if(a>b>c)        //这个表达是错误的。
then ...
注:上述表达式错误的。a>b>c 先执行a>b:如果a>b,则结果为1;否则结果为0。再用c与0(1)比较。

例2:
printf("%d",5>0);   //结果为:1。5>0为真。

四、逻辑运算符
逻辑与:&&      A&&B 如果A为真,才会看B。如果A为假,则不看B。
逻辑或:||          A||B  如果A为A,则不看B。如果A为假,才会看B。
逻辑非:!

例1:
#include <stdio.h>

int main(){
    int a=2,b=3,c;
    c=a>0 || ++b>0;         //先执行逻辑表达式(a>0||++b>0),然后再执行赋值语句。对于逻辑表达式。由于a>0为真,所以不执行++b>0。
    printf("%d,%d\n",b,c);      //b=3,c=1
    return 0;
}

结果:
3,1

例2:
#include <stdio.h>

int main(){
    int a=-2,b=-3,c;
    c=a>0 || ++b>0;  //先执行逻辑表达式(a>0||++b>0),然后再执行赋值语句。对于逻辑表达式。由于a>0为假,所以执行++b>0。b加1得-2,小于零,为假。
    printf("%d,%d\n",b,c);   //b=-2,c=0
    return 0;
}

结果:
-2,0




8.1写出下列程序的运行结果(与或)
#include<iostream.h>

void main()
{
   int x=2,y,z;
   x*=(y=z=5);cout<<x<<endl;        y=5 x=2*5=10  10

   z=3;
   x==(y=z);cout<<x<<endl;            y=3 x=10 
   x=(y==z);cout<<x<<endl;            y=3 z=3 y==z 1 x=1
   x=(y&z);cout<<x<<endl;             
   x=(y&&z);cout<<x<<endl;

   y=4;
   x=(y|z);cout<<x<<endl;
   x=(y||z);cout<<x<<endl;
}
结果:10 10 1 3 1 7 1
8.2 与或非问题
用一个表达式,判断一个数X是否为2N次方(2,4,8,16,…),不可用循环语句。
答案:!(X&(X-1))
解释:2N次方为:10,100,1000,10000,…分别减1之后为:1,11,111,1111,…与原来的数相与结果为0。
8.3 编写代码,求出数m的二进制数中1的个数。
#include<iostream.h>

void main()
{
  int count=0;
  int m=9999;
    while(m)
    {
         count++;
                 m=m&(m-1); 
    }
  cout<<count<<endl;
}


五、位运算符
按位与:&    0&0=0    0&1=0    1&0=0    1&1=1
作用1:对二进制清零(复位)。想要对一个数某些位清零,其他位不变,则只需设计一个数,使它符合以下条件:需要清零的对应位其值为0,而不变的对应位为1。然后二者进行按位与运算。
作用2:提取一个数中的某些位。如果要取出某些位,则只需设计一个数,使它符合以下条件:需要取出的位的对应位位1,其他位的对应位为0。然后二者进行按位与运算。

例1:22&0
解:22=00010110
      00010110
&   00000000
      00000000

例2:0x16 & 0x0f
解:0x16=00010110 0x0f=00001111
       00010110
 &   00001111
       00000110

按位或:|    
作用: 

按位异或:^

一个数与本身异或得0。
一个数与0异或得本身。


按位取反:~

左移:<< 扩大一倍(*2) 左移有可能溢出。

右移:>> 缩小一倍(/2)

六、条件运算符(三元运算符)
max=a>b?a:b //如果a>b,则max=a;否则max=b

自增
a+=1  //即,a=a+1
a++    //即,a自增1

例:
#include <stdio.h>

int main(){
    int a=1;
    printf("%d\n",a++);   //1
    printf("%d\n",a);     //2
    a=1;
    printf("%d\n",++a);   //2
    printf("%d\n",a);     //2

    return 0;
}

猜你喜欢

转载自blog.csdn.net/pengchengliu/article/details/80562996