少年读书,如隙中窥月;中年读书,如庭中望月;老年读书,如台上玩月。皆以阅历之深浅,为所得之深浅耳——张潮
C语言运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。
一.算数运算符
数学中常见的加减乘除在C语言中同样存在:“+",“-”,"*" ,"/"。
注:其中值得注意的是在C语言中如果两个整型相除得到的结果仍为整型(整数)而非浮点型(小数)。
其他的算数运算符还有
1.取模运算符("%"):结果为整除后的余数
2.自增运算符 ("++") : 结果为整数值增加 1
3.自减运算符 ("--") :结果为整数值减少1
注:自增/自减运算符的放置位置也会影响运算结果
#include<stdio.h> int main() { int a, b,c,d; a = b = 1; c = a++; d = ++b; printf("%d,%d", c, d); return 0; }
以下是算数运算符的运用 #include<stdio.h> int main() { int a, b,c,d; a = 8;b = 2; c = a + b; printf("%d\n", c); c = a - b; printf("%d\n", c); c = a * b; printf("%d\n", c); c = a / b; printf("%d\n", c); c = a % b; printf("%d\n", c); c = a++; printf("%d\n", c); c = --b; printf("%d\n", c); return 0; }
二.关系运算符
在C语言中0为假,一切的非0为真
如同数学中常见的大于小于一般,C语言中同样拥有
小于(">") 大于(“<”) 大于等于(“>=”) 小于等于(“<=”)
其中若运算成立结果即为真反之诺不成立结果即为假
另外的关系运算符还有
1.等于("=="):检查两个操作数的值是否相等,如果相等则条件为真。(与数学中的等于”=“略有不同,在c语言中”=“为赋值运算符有不同的用法)
2.不等于 ("!="):检查两个操作数的值是否相等,如果不相等则条件为真。(与等于相反真为假,假为真)
以下是关系运算符的运用
int main() { int a = 21; int b = 10; int c; if (a == b) { printf("Line 1 - a 等于 b\n"); } else { printf("Line 1 - a 不等于 b\n"); } if (a < b) { printf("Line 2 - a 小于 b\n"); } else { printf("Line 2 - a 不小于 b\n"); } if (a > b) { printf("Line 3 - a 大于 b\n"); } else { printf("Line 3 - a 不大于 b\n"); } /* 改变 a 和 b 的值 */ a = 5; b = 20; if (a <= b) { printf("Line 4 - a 小于或等于 b\n"); } if (b >= a) { printf("Line 5 - b 大于或等于 a\n"); } }
三.逻辑运算符与位运算符
这两种运算符在C语言的使用中算是较难,易弄混的点,于是我就些在一起了
逻辑运算符
1.逻辑与运算符(“&&”):如果两个操作数都非零,则条件为真。
2.逻辑或运算符(“ ||“ ) : 如果两个操作数中有任意一个非零,则条件为真。
3.逻辑非运算符(“ !”) :用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。
位运算符
1.按位与操作符(“&”):假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
2.按位或运算符( "|" ) :A = 0011 1100 B = 0000 1101
3.异或运算符 ( "^" ) : A&B = 0000 1100 A|B = 0011 1101
4.取反运算符 ( "~" ) : A|B = 0011 1101 A^B = 0011 000
5.二进制左移运算符( "<<" ):
6.二进制右移运算符(">>" ):
注:若运算值为负数需考虑原码,反码,补码的转换
以下是逻辑运算符及位运算符的运用
#include <stdio.h> int main() { int a = 5; int b = 20; int c ; if ( a && b ) { printf("Line 1 - 条件为真\n" ); } if ( a || b ) { printf("Line 2 - 条件为真\n" ); } /* 改变 a 和 b 的值 */ a = 0; b = 10; if ( a && b ) { printf("Line 3 - 条件为真\n" ); } else { printf("Line 3 - 条件为假\n" ); } if ( !(a && b) ) { printf("Line 4 - 条件为真\n" ); } }
#include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ printf("Line 1 - c 的值是 %d\n", c ); c = a | b; /* 61 = 0011 1101 */ printf("Line 2 - c 的值是 %d\n", c ); c = a ^ b; /* 49 = 0011 0001 */ printf("Line 3 - c 的值是 %d\n", c ); c = ~a; /*-61 = 1100 0011 */ printf("Line 4 - c 的值是 %d\n", c ); c = a << 2; /* 240 = 1111 0000 */ printf("Line 5 - c 的值是 %d\n", c ); c = a >> 2; /* 15 = 0000 1111 */ printf("Line 6 - c 的值是 %d\n", c ); }
四.赋值运算符
C 语言共提供了 11 个赋值运算符,均为二元运算符,其中仅有一个为基本赋值运算符 =,其余 10 个均是复合赋值运算符。
1.简单的赋值运算符(" = ") :右边操作数的值赋给左边操作数。
2.加且赋值运算符 ("+="):把右边操作数加上左边操作数的结果赋值给左边操作数。
3减且赋值运算符 ("-+" ) :把左边操作数减去右边操作数的结果赋值给左边操作数。
4.乘且赋值运算符 ("*=" ) :把右边操作数乘以左边操作数的结果赋值给左边操作数。
5.除且赋值运算符 ("/=" ) :把左边操作数除以右边操作数的结果赋值给左边操作数。
6.求模且赋值运算符("%=" ) 求两个操作数的模赋值给左边操作数。
7.左移且赋值运算符("<<=" )
8.右移且赋值运算符(">>=" )
9.按位与且赋值运算符("&=" )
10.按位异或且赋值运算符("^=" )
11.按位或且赋值运算符("|=" )
以下是赋值运算符的运用
#include <stdio.h> int main() { int a = 21; int c ; c = a; printf("Line 1 - = 运算符实例,c 的值 = %d\n", c ); c += a; printf("Line 2 - += 运算符实例,c 的值 = %d\n", c ); c -= a; printf("Line 3 - -= 运算符实例,c 的值 = %d\n", c ); c *= a; printf("Line 4 - *= 运算符实例,c 的值 = %d\n", c ); c /= a; printf("Line 5 - /= 运算符实例,c 的值 = %d\n", c ); c = 200; c %= a; printf("Line 6 - %%= 运算符实例,c 的值 = %d\n", c ); c <<= 2; printf("Line 7 - <<= 运算符实例,c 的值 = %d\n", c ); c >>= 2; printf("Line 8 - >>= 运算符实例,c 的值 = %d\n", c ); c &= 2; printf("Line 9 - &= 运算符实例,c 的值 = %d\n", c ); c ^= 2; printf("Line 10 - ^= 运算符实例,c 的值 = %d\n", c ); c |= 2; printf("Line 11 - |= 运算符实例,c 的值 = %d\n", c ); }
五.三目运算符(“?:”)
三目运算符,又称条件运算符,是计算机语言(c,c++,java等)的重要组成部分。它是唯一有3个操作数的运算符,有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。
常见用法如: if(a>b) max=a;else max=b;可用条件表达式写为 max=(a>b) ? a : b;
六.sizeof()
返回变量的大小,并非函数而是运算符与strlen()常被弄混
常见的使用形式为sizeof(变量名)
注:变量名可不被括号括住如sizeof a,不可用sizeof(void)
七.逗号运算符
一条语句理论上是有返回值的,如果语句里面有多个逗号,则以最后一个逗号后面的表达式值为返回值