1.算术运算符
+ :将两个数从左向右进行相加运算
- :将两个数从左向右进行相减运算
* :将两个数从左向右进行相乘运算
/ :将两个数从左向右进行除法运算,若两数都为整数,则结果为整数部分;若有一为浮点数,则结
果为浮点数
% :对左操作数进行模右操作数运算,即算术求余
++:自增运算,数值加1。b=++a, a先进行自增运算,再把结果赋值给b;b=a++, 先把a的值给b,a再进行自增运算。
- - :自减运算,数值减1。b=–a, a先进行自减运算,再把结果赋值给b;b=a- -, 先把a的值给b,
a再进行自减运算。
举例:
#include<stdio.h>
int main()
{
int a = 10;
int b = 1;
float c = 5.0;
printf("a = %d, b = %d ,c = %f \n", a, b,c);
printf("a + b = %d \n", a + b);
printf("a - b = %d \n", a - b);
printf("a * b = %d \n", a * b);
printf("a / b = %d\n", a / b);
printf("a / c = %f\n", a / c);
printf("a %% b = %d\n", a % b);
b = ++a;
printf("b = ++a, a= %d, b= %d \n", a, b);
b = --a;
printf("b = --a, a= %d, b= %d \n", a, b);
b = a++;
printf("b = a++, a= %d, b= %d \n", a, b);
b = a--;
printf("b = a--, a= %d, b= %d \n", a, b);
return 0;
}
结果:
2.关系运算符
== :比较两个操作数的值是否相等,相等为真,不等则为假。
!= : 比较两个操作数数是否相等,不等为真,相等为假;
> :检查左边的数是否大于右边的数,如果条件成立,则为真,否则为假。
< :检查左边的数是否小于右边的数,如果条件成立,则为真,否则为假。
>= :检查左边的数是否大于等于右边的数,如果条件成立,则为真,否则为假。
<= :检查左边的数是否小于等于右边的数,如果条件成立,则为真,否则为假。
举例:
#include<stdio.h>
int main()
{
int a = 10;
int b = 1;
printf("a = %d,b=%d\n", a, b);
if (a == b)
printf("a 等于 b。\n");
else
printf("a 不等于 b。\n");
if (a > b)
printf("a 大于 b。\n");
else
printf("a 小于等于 b。\n");
a = 10;
b = 10;
printf("a = %d,b=%d\n", a, b);
if (a != b)
printf("a 不等于 b。\n");
else
printf("a 等于 b。\n");
if (a <= b)
printf("a 小于等于 b。\n");
else
printf("a 大于 b。\n");
return 0;
}
结果:
3.逻辑运算符
&& :逻辑与运算符,若两数有一为假,结果为假,否则为真。
|| : 逻辑或运算符,若两数有一为真,结果为真,否则为假。
! :逻辑非运算符,若操作数为真,结果为假,否则为真。
补充:a&&b&&c,若a为假,则不进行后面的运算,a||b||c,若a为真,则不进行后面的运算。
举例:
#include<stdio.h>
int main()
{
int a = 10;
int b = 1;
printf("a = %d,b = %d\n", a, b);
if (a&&b)
printf("a && b的结果为真。\n");
else
printf("a && b结果为假。\n");
if (a||b)
printf("a || b的结果为真。\n");
else
printf("a || b结果为假。\n");
if (!a)
printf("!a 的结果为真。\n");
else
printf("!a 结果为假。\n");
return 0;
}
结果:
4.位运算符
& : 将两个数的二进制进行运算(0&1 = 0, 1&1 = 1, 0&0= 0)
| : 将两个数的二进制进行运算( 0|1 = 1, 0|0 = 0,1|1 = 1)
^ : 将两个数的二进制进行运算(1^1 = 0, 1^0 = 1, 0^0 = 0)
>> : 右移操作符,将一个数补码的二进制位进行逻辑右移或者算术右移(若该数不是过大,右移一
位,表达式结果变为原来的1/2)
<< : 左移操作符,将一个数补码的二进制位进行左移,低位补0(若该数不是过大,左移一位,表
达式结果变为原来的2倍)
~ : 将一个数的二进制进行取反操作(1变为0,0变为1)
补充:(正数的源码=补码=反码,负数的反码:源码的符号位不变,其他位取反;补码:反码
+1。)
(逻辑右移: 右边丢弃,左边补0。算术右移:右边丢弃,左边补符号位。且移位方式取决
于编译器)
举例:
#include<stdio.h>
int main()
{
int a = 20;//二进制0001 0100
int b = 10;//二进制0000 1010
printf("a & b = %d\n", a & b); //二进制0000 0000 十进制0
printf("a | b = %d\n", a | b); //二进制0001 1110 十进制30
printf("a ^ b = %d\n", a^b); //二进制0001 1110 十进制30
printf("a >>1 = %d\n", a >> 1); //二进制0000 1010 十进制10
printf("a <<1 = %d\n", a << 1); //二进制0010 1000 十进制40
printf(" ~b = %d\n", ~b); //二进制1111 0101 十进制-11的补码
return 0;
}
结果:
5.赋值运算符
= : 将右边操作数的值赋给左边
+=: 加且赋值运算符,将左边操作数加上右边操作数的结果赋给左边操作数
-=: 减且赋值运算符,将左边操作数减上右边操作数的结果赋给左边操作数
*=: 乘且赋值运算符,将左边操作数乘以右边操作数的结果赋给左边操作数
/=: 除且赋值运算符,将左边操作数除以右边操作数的结果赋给左边操作数
%=: 求模且赋值运算符,将左边操作数对右边操作数求模的结果赋给左边操作数
… …
举例:
#include<stdio.h>
int main()
{
int a = 20;
int b = 10;
printf("a = %d, b = %d\n", a, b);
printf("a += b,a = %d\n",a+=b);
printf("a -= b,a = %d\n",a-=b);
printf("a *= b,a = %d\n",a*=b);
printf("a /= b,a = %d\n",a/=b);
return 0;
}
结果:
6.其他操作符
sizeof() :求取操作数所占空间大小(以字节为单位,若括号中有运算,则不更新值,只将值作为判断使用)
* : 间接访问操作符
& : 取地址操作符(当&作为単目操作符时)
(a=0?1:0): (?:)条件表达式,a=0为真,将1赋给a,否则将0赋给a。
[ ] : 下标引用操作符
-> / . : 指向结构体成员运算符,使用一个指向结构体或对象的指针访问其内成员。
, : 逗号运算符。将两个及以上的表达式结合起来,从左向右进行运算,整个表达式的值为最后一
个表达式的值。
(转换类型)变量:强制类型转换
举例:
#include<stdio.h>
#include<string.h>
struct School
{
char name[20];
char address[20];
int telephone;
};
int main()
{
int a[10] = { 1,2,3,4,5 };
int b = 5;
int *p = &a[0];//将数组a的地址赋给指针p
printf("\n数组部分:\n");
printf("数组a的所占内存长度为: %d\n", sizeof(a));
printf("数组a的地址为:%p\n", &a);
printf("p=&a[0]的值为:%p\n", p);
printf("数组a的首元素地址为:%p\n", &a[0]);
printf("数组a的首元素地址为:%p\n", a);
printf("\n强制类型转换部分:\n");
b = (int)6.66;//强制类型转换
printf("b=(int)6.66的结果是:%d\n", b);
printf("\n逗号运算符:\n");
b = (6+1, 7+1, 8+1);//逗号运算符
printf("b = (6+1, 7+1, 8+1)的结果是:%d\n", b);
printf("\n结构体:\n");
struct School school = { 0 };//结构体
strcpy(school.address, "陕西西安临潼\n");
printf("地址是:%s", school.address);
struct School *q=&school;
strcpy(q->name, "西安工程大学\n");
printf("名称; %s", q->name);
(*q).telephone = 123456789;
printf("电话:%d\n", (*q).telephone);
return 0;
}
结果: