【C语言】操作符详解

1. 算术操作符


+ - * / % 
  1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
  3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
  4. /取商 %取余

2. 移位操作符

整数的二进制表示有:原码、反码、补码

存到内存中的是补码

正整数的原反补是相同的

原码:最高位是符号位0正1负

反码:除了符号位其余按位取反

补码:反码+1

<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。

2.1 左移操作符

移位规则:

左边抛弃、右边补0

2.2 右移操作符

移位规则:

首先右移运算分两种:

  1. 逻辑移位

左边用0填充,右边丢弃

  1. 算术移位

左边用原该值的符号位填充,右边丢弃

警告⚠ :

对于移位运算符,不要移动负数位,这个是标准未定义的。

例如:

int num = 10;
num>>-1;//error

3. 位操作符

& //按二进制位与    一假则假
| //按二进制位或	  一真为真
^ //按二进制位异或  相同为0,相异为1
注:他们的操作数必须是整数。

4. 赋值操作符

+=		
-=
*=
/=
%=
>>=
<<=
&=
|=
^=

举例:a+=2等效于a = a + 2

其他的运算方式一样的

5. 单目操作符

概念:单目操作符只有一个操作数

例如:a + b + 有两个操作数

!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof      操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符) 
(类型)       强制类型转换

–/++在前先–/++再使用

–/++在后先使用再–/++

6. 关系操作符

>
>=
<
<=
!=      用于测试“不相等”
==      用于测试“相等”

7. 逻辑操作符

&&     		逻辑与
||          逻辑或

&&一假则假

| | 一真则真

例题:

#include <stdio.h>
int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    //i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0; }
//程序输出的结果是什么?

正确结果是:1 2 3 4

因为当&&的左边为0那么将不会执行后面的语句,因为不管后面值是多少那一定也是0,所没有执行的意义

那下面这题呢?

#include <stdio.h>

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	//i = a++ && ++b && d++;
	i = a++||++b||d++;
	printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
	return 0;
}

正确结果是:2 2 3 4

因为当||的左边为1那么将不会执行后面的语句,因为不管后面值是多少那一定也是1,所没有执行的意义

8. 条件操作符

exp1 ? exp2 : exp3

若exp1为真则执行exp2,否则执行exp3

举个例子:

#include <stdio.h>

int main()
{
	//将a,b中更大的值赋给max
	int a = 5;
	int b = 10;
	int max = 0;
	//方法一
	/*if (a > b)
	{
		max = a;
	}
	else
	{
		max = b;
	}*/
	//方法二:
	max = (a > b ? a : b);
	printf("%d\r\n", max);
	return 0;
}

9. 逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式。

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

例题:

int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗号表达式

c=13

10. 下标引用、函数调用和结构成员

[]  //下标引用操作符
()  //函数调用操作符
.   //结构体.成员名
->  //结构体指针->成员名

1.[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值

2.( ) 函数调用操作符

接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

3.访问一个结构的成员

. 结构体.成员名

-> 结构体指针->成员名

#include <stdio.h>
struct Stu
{
 char name[10];
 int age;
 char sex[5];
 double score;
}void set_age1(struct Stu stu) {
 stu.age = 18; 
}
void set_age2(struct Stu* pStu) {
 pStu->age = 18;//结构成员访问
}
int main()
{
 struct Stu stu;
 struct Stu* pStu = &stu;//结构成员访问
 
 stu.age = 20;//结构成员访问
 set_age1(stu);
 
 pStu->age = 20;//结构成员访问
 set_age2(pStu);
 return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Genius-Sue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值