C语言 运算符、表达式

运算符、表达式
1、 C语言运算符
算术运算符和算术表达式
 +(加)、—(减)、*(乘)、/(除)、%(取余,也叫模运算符,该运算符两侧都要求为整数)
// printf("表达式的结果为%d\n",5/3);    两个整数相除,系统会舍弃小数部分。
printf("表达式的结果为%d\n",9%4);       // 7/4 = 1,7%4 = 3      9/4 = 2,9%4 = 1;
优先级问题:先乘除,后加减,如果优先级相同,则按照先算左边,后算右边的方式来处理(从左到右结合);
例如:2+3*5;这个先算乘法再算 加法         2+8-5;   这个从左到右计算
2、 赋值运算符
int i;
i = 4+3;   //把等号 右边的值 赋给 等号左边的变量。  ==> i = (4+3);  //括号,如果搞不懂优先级,那么就用()运算符把需要优先计算的内容括起来。
3、 强制类型转换运算符:讲一个表达式转换成所需要的类型
强制类型转换得到的是一个 所转换到的类型的的中间变量,但是 这个类型本身是没有变化而是 整个这个结果的类型发生了变化
int a = 10;
double b;
b = (double) a;         在这里 a 本身类型并没有变化 而是这整个结果的类型发生变化
(int)(x+y)     将x+y 的值转换成整型;
  (float) (5%3)   将5%3 的值转换成float型
总结:强制类型转换运算符的一般形式:
类型名)( 表达式
     注意:(int) x+y    这里表示将 x 转换为整型,然后和 y 相加。
两种类型转换:
(1)、自动类型转换:系统替你转换数据类型
(2)、强制类型转换:当自动类型转换无法达到目的的时候,就用 强制类型转换。
(% 取余,也叫模运算符,该运算符两侧都要求为整数)
i = (int) x % 3;
4、 自增和自减操作符    ++(自增)  --(自减)
自增和自减操作符 只能用于变量不能用于常量或表达式。比如错误的用法    5++,(a-b)++ ,--5 ,--(a+b) ;
当自增或自减运算符在变量屁股后面时,对于该自增或自减 表达式的使用时, 先用后加
int i = 6;
i ++;   // 7, 先用后加
++ i;   // 7,
注意:如果i++ 或者 ++ i 单独写成一个语句,没有任何区别, 都是将变量自身 +1,没有区别,但是,如果放 在函数调用中,结果就会不同。
例如: A.用在函数中时:
printf("i++的结果是=%d\n",i++);   //这里表示先用后加,i ++的结果是 6;
printf("i++的结果是%d\n",i++);        //先用后加,i++ 的结果是 6;i 本身变成了7。
printf("++i的结果是%d\n",++i);        //先加后用,i++ 的结果是 7;i 本身变成了7。
printf("i--的结果是%d\n",i--);        //先用后减,i-- 的结果是 6;i 本身变成了5。
printf("--i的结果是%d\n",--i);        //先减后用,--i 的结果是 5;i 本身变成了5。
          B.单独作为表达式的时候:【 表达式:可以理解为用 +-*/ 串起来的一个式子】
--i;      //结果为5
i--;      //结果为5
-i++; ==> -(i++);       //这里看优先级,++ 的优先级比 -更高。
5、 赋值运算符和赋值表达式   (=) 将等号右边的值赋给等号左边的变量。
等号的左边,是一个变量,所谓这个赋值,大家理解成:给变量一个值,或者改变变量为哪个值。
int a;
a = 5;
a = 6.5;    //将实型数据赋给整型变量时,小数部分会被设置为  a = 6;
a = 18+50;     //相当于 a = 68;
a = a+5;         // 相当于 a = 73;
float f;
f = 125;      // 1.25E+2,实型变量是按指数形式保存在内存中的。
几个概念:
char a;     // 这个叫变量定义,系统会给a 分配一个字节的内存,内存里面的值不确定
char a = 90;    // 这个叫变量定义,同时给变量赋初值(定义时初始化);而且这个不是赋初值,这个叫:定义时赋初值。
a = 900;     // 赋值语句,这就是赋值,但是这里char类型会造成溢出,溢出后a里面的内容,就变得不可预料,会乱码。
赋值的原则:类型要相同,类型不同的要强制类型转换,当强制类型转换时,开发者必须自己明确是否会溢出。
int a =8;
a += 3;  // 11  a = a+3;
int x = 2;y = 8;
x *= y+8;    // 32 ==> x = x * (y+8);  如果 *= 右侧是个表达式的话,则相当于该表达式有括号。
赋值表达式(复合的赋值表达式)本身也是有值的
int a = 4;
printf("a = 5这个赋值表达式的值是%d\n",a = 5);     // 输出的结果是 5
printf("a += 8这个赋值表达式的值是%d\n",a +=8);    //输出的结果是 13
int a,b,c;
a=(b=5);   //a=5;b=5;
a = b = c=5;   //赋值运算符具有从右到左的结合性
a = (b = (c =5));
int a = 3;
a+=a-=a*a;         // a +=(a -=(a*a));  结果为-12
6、逗号运算符和逗号表达式
逗号运算符  将两个表达式 连接起来;逗号运算符 它的 优先级是最低的
格式:表达式1,表达式2
求解过程:先求解表达式1的值,再求解表达式2的值,整个 表达式的值是表达式2的值!
int a;
a = (4,5);   //整个表达式的值是5
a = (3+5,6+8);  //整个表达式的值是14
a = 3+5,a+4;   //整个表达式的值是60  a 的值变成了15
逗号表达式的扩展形式:
表达式1,表达式2,表达式3,表达式3,....表达式N,最终的值是表达式N的值。
int x,a;
x = (a = 3,6*3);   //a = 3;x = 18;
x = a =3,6*a;    // x = 3,a =3;   逗号表达式的结果是18,但是这个结果值并没有用到
  • 6
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值