运算符
在说运算符的时候必须知道运算符对象,就是这个运算符有几个对象。
1+1//那么这个+号有两个运算对象
i++//这个++运算符只有一个运算对象
a>b?a:b;//三目运算符,?:这个整体是一个运算符,所以有三个对象
算数运算符:
a+b //加
a-b //减
a*b //乘
a/b //除
a%b //取余
a+=b; a=a+b
a-=b; a=a-b
a*=b; a=a*b
a/=b; a=a/b
虽然都是很简单的运算符,但是我还是想碎碎念一下,我自己刚开始学,经常错的地方
1.printf(“%d\n”,5/2)
,这个是两个整数相除,结果也会是整数,输出的结果为:2
。
2.printf(“%lf\n”,5/2.0)
,整数除一个浮点数,输出的结果是浮点数,这是自动转换。
这里还需要强调一下,如果一个数为3.0,那么这个数的类型为double(双精度浮点型),想要定义为float(单精度)的话,写的时候应该显式的加上f,3.0f。所以结果为:2.500000
3.printf("%d\n",3%5)
,取余中,一般判断某个数能否被整除。这里结果为:3
.
还有一个比较常用的:随机数
//比如我们想随机一个60~100的数
#include<stdlib.h>
#include<time.h>
void test02()
{
//设置随机数种子
srand(time(NULL));
//rand()产生随机数
printf("%d\n", rand()%41+60);
}
这里可以看出%取余,rand()%41产生的范围为0~40,要注意,别整迷糊了。
再写一个随机的字母
#include<stdlib.h>
#include<time.h>
void test02()
{
//设置随机数种子
srand(time(NULL));
//rand()产生随机数
printf("%c\n", rand()%26+'a');
}
如果想随机出大写的字母,那就将字符a,变为A。有点偏题了,说回来。
4.+=,-+,*=,/=
这个就很简单了
a+=b; a=a+b
a-=b; a=a-b
a*=b; a=a*b
a/=b; a=a/b
看一个典型的例题
int a = 12;
a += a-= a*=a;
printf("a = %d\n", a);
输出的是什么呢?
首先这个表达式的计算是从右到左计算,下面我们分布计算:
a += a -= a *= a;
a += a -= a = a*a;--->a += a -=144 ;
a += a =a-a;//此时的a为144----->a += 0
a=a+0;//此时a为0
一个看似复杂的表达式,从右往左,一步一步解开来,并不复杂,这个a的值一直在更迭,需要注意,而不是全部化简,之后再带入a的值,计算机是一步一步进行计算的。
5.关系运算符>,<,==,>=,<=,!=
这里需要强调的就是 : = =和=
a == 10 表示 a是否和10相等
a = 10 表示 将10赋值给a
常用的是判断一个值是否在某个区间中
int data = 0;
printf("%d",&data);
scanf("%d",data);
if(data >= 0 && data <= 10)
{
printf("%d在0~10之间\n");
}
6.逻辑运算符&& ,||,!
这是有“短路特性”的运算符。什么是短路特性呢,下面我举例子来说明:
void test()
{
(3>5) && printf("周继小机灵鬼\n");
}
在这里,因为(3>5)是假,所以根据&&的特性“全真为真,一假为假”,所以编译器就不会去检测第二个运算对象是否为真,因为它已经判定这整个表达式为假,所以后面那句话也不会输出。
void test()
{
(30>5) || printf("周继小机灵鬼\n");
}
那么这一个 ||运算符的特性“全假为假,一真为真”,眼看,第一个运算对象为真,那么后面编译器就不去判断了,这个表达式为真!
逻辑非!,这个就很简单了
!真 == 假
!假 == 真
注意点:在c语言中,除了0都是真!!!