C语言其他运算符
一、逗号运算符
逗号运算符扩展for循环的灵活性,以便在循环图中包含更多的表达式。
1.逗号表达式的一般形式 表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值 例如:
(1)逗号表达式“3+5,6+8”的值为14
(2)逗号表达式a=3 * 5,a4,对此表达式的求解,赋值运算符的优先级别高于逗号运算符,因此应先求解a=3 * 5,经计算和赋值后得到a的值为15,然后求解a * 4,得60,整个逗号表达式的值为60(a仍为15)。
(3)一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如(a=35,a4),a+5先计算出a的值等于15,再进行a4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。 2.逗号表达式的一般形式可以扩展为 表达式1,表达式2,表达式3,…………,表达式n 它的值为表达式n的值 3.逗号运算符是所有运算符中级别最低的,因此,下面两个表达式的作用是不同的:
(1)x=(a=3,63)
(2)x=a=3,6a 第一个是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18 第二个是逗号表达式,它包括一个赋值表达式和一个算数表达式,x的值为3 4.其实,逗号表达式无非是把若干个表达式“串联”起来。即逗号表达式纯粹就是为了在只能写一条表达式的地方写多条表达式而设计的,逗号运算符用得最多的地方就是for循环,例如:
for(int i=0,j=SIZE-1;i
二、条件运算符?:
1.条件运算符?:是C语言中的唯一一个三元运算符
例子:x=(y<0) ? -y : y;
在 = 和 ; 之间的内容就是条件表达式,该语句的意思是“如果y小于0,那么x=-y;否则x=y”。用if else可以这样表达:
if(y<0)
x=-y;
else
x=y;
2.条件表达式的通用形式如下:
expression1 ? expression2 : expression3
如果expression1为真(非0),那么整个条件表达式的值与expression2的值相同;如果expression1为假(0),那么整个条件表达式的值与expression3的值相同
三、sizeof运算符
sizeof 运算符 返回一条表达式或一个类型名字所占的字节数。与众不同的一点是,sizeof 并不实际计算其运行对象的值。
sizeof返回值为一个叫size_t的变量,但是我们可以通过查找发现,这种变量是用typedef声明转化为unsigned int 或者unsigned long型。
typedef:给一个类型起别名的机制
typedef number int;
这样在你定义int型的时候,可以写成 number max;这样来定义一个int型
看一下接下来的例子:
size_t intsize;
intsize = sizeof(int);
printf("%zd",intsize);
首先,sizeof运算符如果对一个变量使用,是可以没有括号的,但对于一个类型则一定要有括号;
另外,c99中增加了zd类型,在上一篇博客《scanf和printf函数》中有简介,是专门用来输出sizeof类型的返回值,当然不用也是可以的,u或者ul也能解决问题
四、求模运算 “%”
a%b,其中ab都是int型
如5%3=2,因为5中有一个3,剩下的2不足3,所以为余数。
这里面的重点在下面,在c99标准之后,对于int型运算有很大的冲击,以前的直接截断方式被取消了,换成了“趋零截断”,
也就是如 -19/5这样的结果,-3.8之前是看编译器的处理方式,有的是直接截断保留-3,也有的是取相近的整数-4,但是在c99之后,趋零截断的结果是-3,更加趋向0.
对于求模运算也是类似,有这样一个结论,在 % 运算中,如果第一位是正的,那么结果就是正的;负的相同。
公式:a%b = a-(a/b)
五、递增递减运算++、–
就是取代了"i = i+1"和"j = j-1",但是这里面有一个顺序的问题
因为++和–是可以放在变量的前面和后面,不同的顺序有不同的答案,下面只讨论++运算,–同理
对于 i++; 和 ++i; 这样单独的句子,两种是一样的。
while(++s < 5)这样的句子,和(s++ < 5)就有所不同了,前面是先加一然后比较,后面是先比较,然后加一。
b = a++和b = ++a 前面的是先将a赋值给b,然后a++,后面是先加后赋值
所以我们可以暂时得到一个结论,那就是在需要使用这个数据的时候,递增运算符在前面就先加,在后面就先使用然后加。