//// main.c// 运算符与表达式//// Created by zhangxueming on 15/5/27.// Copyright (c) 2015年 zhangxueming. All rights reserved.//#include//表达式:由运算符常量变量构成的式子//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 && > ||//! 真值表// 表达式 !表达式// 真 假// 假 真//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)>c?(a>b?a:b):c);// printf("min = %d\n", (a 单目运算符(! ++ --) > 算术运算符(/ * % 大于 + -) > 关系运算符(> >= < <= 大于 == !=) > 逻辑运算符 (&& 大于 ||) > 条件运算符(?:) > 赋值(= /= *= %= += -=) > 逗号运算符(,)//可以通过加括号的方式提升优先级//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;//}