黑马程序员-关于C语言基本运算的一些注意点

C语言为何这么强大呢?其中之一就是因为他拥有强大的运算能力,除了简单的加减乘除等算术运算,还有取余运算(%)、赋值运算(=)、自增自减运算(++、--)、求字节数(sizeof)、关系运算(==、>、<、>=、<=)、逻辑运算(与、或、非)以及三目运算(条件?数值1:数值2)
下面我列出其中的一些小细节
第一个程序:
#include<stdio.h>
int main(){

int a = -10 % 3;
printf("%d\n",a);

}
对比
#include<stdio.h>
int main(){

int a = 10 % -3;
printf("%d\n",a);

}
第一程序输出的结果是:-1,第二个的输出结果是:1
结论:取余运算(或者叫模运算)的两边首先必须是整数(可以是负数),余数的正负依赖%前边数值的正负

第二个程序
#include<stdio.h>
int main(){

int a = 10.5;
printf("%d\n",a);

}

第三个程序
#include<stdio.h>
int main(){

double b = 11/4;
printf("%d\n",b);

}
第二个程序的输出结果是:10,第三个程序的输出结果是:3
结论:因为a为int型,而10.5是double型所以将double自动转换成int型,我们也可以这样改:
int a = (int) 10.5;
这种方法是强制类型转换;第三个程序中由于10和4都为整型数值所以输出结果肯定是整型,即使b的类型是double型,结果还是3,要想结果变成3.75,可以这样修改:
double b = 9.0/4;或者double b = 9/4.0;或者double b = (double)9/4;

第四个程序
#include<stdio.h>
int main(){
int a = 4;
a *= 2 + 3;
printf("%d\n",a);

}
这个程序的输出结果是:20
结论:复合赋值运算符后面是一个整体,相当于一个小括号将他们括起来了,之后再作相应的复合赋值

第五个程序
#include<stdio.h>
int main(){
int a = 4;
printf("%d,%d\n",a,a++);

}

第六个程序
#include<stdio.h>
int main(){
int a = 4;
printf("%d,%d\n",++a,a);

}
这两个程序的结果都是:5,4
结论:为啥会是这个结果呢?首先我们要理解a++与++a的区别,前者是先将数值a的原值执行运算,后将数值增一,后者正好相反,先将原值增一,然后执行计算,至于为啥两者结果都是一样,这是由于printf函数在编译器中的计算顺序是从右往左,(因编译器不同,也可能是从左往右)所以导致了这样的结果

第七个程序
#include<stdio.h>
int main(){
int a = 4;
printf("%d,%d,%d\n",sizeof a,sizeof 4,sizeof (int));

}
输出结果为:4,4,4
结论:只需要注意sizeof后面要是跟上的是基本类型标识符的话 必须加上小括号其他的可加可不加

至于关系运算符我们需要注意的每一个关系运算式都有个一返回值(非0即1,0的话即为假,1的话即为真),逻辑与和逻辑或的集合方向都是自左向右,逻辑运算符的两边一般是能判断出真假的条件,但是也可以跟上任何一个常数,非0常数表示真,0即为假

第八个程序
#include<stdio.h>
int main(){
int a = 4;
int b = 6;
int c= a<3 && b++;
printf("%d,%d,%d\n",a,b,c);

}
输出结果为4,6,0
结论:当判断完逻辑与左边的为假时,C语言是不会判断右边的真假,直接得出结果,同理,要是判断完逻辑或左边的为真时,他也是不会进行右边真假的判断的

C语言中,运算也是有一定的先后顺序,就像我们小学里学到的要先乘除后加减有括号的先算括号,C语言中各种运算也是要讲究运算的优先级别的,我们就拿三目运算来说,请看代码:
int main()
{

int c = 10;
int d = 24;

//将c和d中较大者与2相加赋值给变量a
int a = 2 + (c > d)? c : d;
printf("%d\n",a);

return 0;
}

当我们编译连接的时候Xcode会警告我们的,因为+的优先级别高于三目运算符,所以你这样先完后 ?的前面永远是真,程序始终会将c的值加2赋值给a,所以只有将程序的第三行代码改为:int a = 2 + ((c > d)? c : d); 这样才会保证你想要的结果。

结论:当我们用到C语言进行一些运算时,一定要注意优先顺序,一旦一个式子中有过多的运算符,一般他的可读性是很差的,这时我们就要将复杂的算式拆成多行代码,保证程序的可读性,另一方面也能保证程序会按照我们的思路进行下去。

 

转载于:https://www.cnblogs.com/oucding/p/4385502.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值