首页 > 技术文章 > 运算符表达式

0515offer 2015-06-01 13:30 原文

//
//  main.c
//  运算符与表达式
//
//  Created by zhangxueming on 15/5/27.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#include <stdio.h>
//表达式:由运算符常量变量构成的式子
//a+b   4+5*a   a*(b/c)
//表达式有确定的值与类型

//自增自减运算符
//++ --

//int main(int argc, const char * argv[]) {
//    int a = 10;
//    int b = 20;
//    int c = 30;
//    printf("a = %d\n", a++);//先运算表达式的值, a的值再加1
//    printf("a = %d\n", a);
//    printf("a = %d\n", ++a);//先将a的值加1, 再计算表达式的值
//                            //++a <==> a = a+1
//    printf("b = %d\n", b--);
//    printf("b = %d\n", b);
//    printf("b = %d\n", --b);//--b <==> b = b-1;
//    
//    //printf("value = %d\n", ++a++);//错误
//    //printf("value = %d\n", (c++ + c--));//同一个表达式中, 一个变量不可以被修改多次
//    return 0;
//}
//算术运算符
// / * % + -
//优先级
// / * % > + -

//int main(int argc,const char *argv[])
//{
//    int a=10, b = 20;
//    printf("a+b = %d\n", a+b);
//    printf("a-b = %d\n", a-b);
//    
//    printf("a*b = %d\n", a*b);
//    printf("a/b = %d\n", a/b);//a/b 表达式的类型 是int
//    
//    printf("a%%b= %d\n", a%b);
//    
//    printf("value = %d\n", a+b/a);
//    
//    return 0;
//}




//关系运算符
// > >= < <= == !=
//表达式成立 值为1, 表达式不成立 值为0

//int main(int argc,const char *argv[])
//{
//    int a=30, b=20;
//    printf("a>b = %d\n", a>b);
//    
//    printf("a>=b = %d\n", a>=b);
//    
//    printf("a<b = %d\n", a<b);
//    
//    printf("a<=b = %d\n", a<=b);
//    
//    printf("a==b = %d\n", a==b);
//    
//    printf("a!=b = %d\n", a!=b);
//
//    return 0;
//}

//逻辑运算符
//逻辑非: !
//逻辑与(逻辑乘):&&
//逻辑或(逻辑加):||
//! > && > ||

//! 真值表
// 表达式   !表达式
//  真       假
//  假       真

//int main(int argc,const char *argv[])
//{
//    int a = 10;
//    printf("value = %d\n", !a);
//    return 0;
//}

//&&
// 表达式1    表达式2 ...   表达式
//  真         真           真
//  假         真           假
//  真         假           假
//  假         假           假
//结论:只有所有表达式的值都为真的情况, 整个表达式的值才为真, 否者为假

//int main(int argc,const char *argv[])
//{
//    int a=0, b=0;
//    printf("value = %d\n", a&&b);
//    return 0;
//}

// ||
//表达式1  表达式2  ... 表达式
//真         真          真
//假         真          真
//真         假          真
//假         假          假
//结论:任意有一个表达式为真, 则整个表达式为真,只有所有的表达式都为假的时候, 整个表达式的值为假

//int main(int argc, const char *argv[])
//{
//    int a=0, b = 0;
//    printf("value = %d\n", a||b);
//    
//    return 0;
//}

//条件运算符(三目运算符)
// ?:
//条件表达式?表达式1:表达式2
//首先判断条件表达式是否成立 成立整个表达式的值就是表达式1的值 否则是表达式2的值

//int main(int argc,const char *argv[])
//{
//    int a=40, b=80;
//    int c=50;
//    printf("min = %d\n", a<b?a:b);
//    
//    printf("max = %d\n", (a>b?a:b)>c?(a>b?a:b):c);
//    printf("min = %d\n", (a<b?a:b)<c?(a<b?a:b):c);
//    
//    return 0;
//}


//赋值运算符
// =  *= /= %= += -=

//int main(int argc, const char *argv[])
//{
//    int a=10;//初始化:在定义变量的同时, 给变量一个初值
//    int b;
//    b = 20;//赋值语句
//    
//    printf("a = %d\n", a*=10);// a= a*10;
//    printf("a = %d\n", a/=10);// a= a/10;
//    
//    printf("a = %d\n", a+=20);// a= a+20;
//    printf("a = %d\n", a-=20);// a= a-20;
//    
//    printf("a = %d\n", a%=2); // a= a%2;
//    
//    return 0;
//}

//逗号运算符
// ,
//表达式1,表达式2,表达式3,....,表达式n;
//整个表达式的值就是表达式n的值

//int main(int argc,const char *argv[])
//{
//    int a=10,b=20;
//    int c;
//    printf("value = %d\n",(c=a+b,a-b));
//    printf("value = %d\n", (a++,b++,a+b));
//    return 0;
//}

//优先级 : 括号>单目运算符(! ++ --) > 算术运算符(/ * % 大于 + -) > 关系运算符(> >= < <= 大于 == !=) > 逻辑运算符 (&& 大于 ||) > 条件运算符(?:) > 赋值(= /= *= %= += -=) > 逗号运算符(,)

//可以通过加括号的方式提升优先级

//int main(int argc,const char *argv[])
//{
//    int a=10, b=20, c=30;
//    
//    printf("value = %d\n", a*(b+c));
//    return 0;
//}

//scanf printf用法
//int     scanf(const char *format, ...)
//int main(int argc,const char *argv[])
//{
//    int a, b;
//    char ch;
//    char ch2;
//    scanf("%d%d%c",&a,&b,&ch);//&取地址符, 最后一个占位符与双引号之间不要加任何东西,造成输入阻塞
//    //printf("%p %p\n",&a, &b);
//    getchar();
//    
//    scanf("%c",&ch2);
//    
//    printf("a = %d b = %d\n", a,b);
//    printf("ch = %c\n", ch);
//    printf("ch2 = %c\n", ch2);
//    
//    return 0;
//}

//强制类型转换
//int main(int argc,const char *argv[])
//{
//    //00000000 00000000 00000000 00001010
//    //00000000 00000000 00000000 00010100
//    //------------------------------------
//    //00000000 00000000 00000000 00011110
//    //正数位扩展,高位补0
////    int a=10;
////    char b= 20;
////    printf("a+b = %d\n", a+b);//隐式转换
//    
//    int a=6;
//    char b=-5;
//    //对于负数发生位扩展, 高位补1
//    //00000000 00000000 00000000 00000110
//    //11111111 11111111 11111111 11111011
//    //-----------------------------------
//    //00000000 00000000 00000000 00000001
//    
//    printf("a+b = %d\n", a+b);//隐式转换
//    
//    int num=10;
//    float f=3.14;
//    printf("%f\n",num+f);//隐式转换 int 提升成float
//    
//    printf("%d\n",(int)(num+f));//显示转换
//    printf("%d\n", num+(int)f);
//    return 0;
//}

//int main(int argc, const char *argv[])
//{
//    int a=0x2345;
//    char b;
//    b = a;//发生了位截断, 高24位丢弃
//    printf("a = 0x%x\n", a);
//    printf("b = 0x%x\n", b);
//
//    return 0;
//}

//char short int long long long
//float double long double
//1. char short 向int看齐
//2. char short int 向 long longlong 看齐
//3. 整型向浮点类型看齐
//4. float double 向long double看齐

//int main(int argc,const char *argv[])
//{
//    char a=10;
//    short b = 20;
//    printf("a+b = %d\n", a+b);
//    
//    return 0;
//}

 

推荐阅读