// // 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; //}