6.操作符笔记

操作符

一、算术操作符

		+	-	*	/	%
  1. 除了 % 操作符之外,其他操作符都可用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法;而只要有浮点数,就执行浮点数除法。
  3. % 操作符两个操作数必为整数。

二、移位操作符

<<	左移操作符
>>	右移操作符
int a = 1;
int b = a << 1;	//	把a的二进制位向左移动一位。		
// 左移:左边丢弃,右边补0.

int b = a >> 1;	//	把a的二进制位向右移动一位。
// 右移:
//	1.算术右移(通常):右边丢弃,左边补原符号位.
//	2.逻辑右移:右边丢弃,左边补0.

int 类型有 4 个字节,占 32 个 bite 位。

a ----00000000000000000000000000000001

对于移位运算符,不能移动负数位 :num >> -1

在这里插入图片描述·

正整数的原码,反码,补码完全相同。

三、位操作符

&	//按位与
|	//按位或
^	//按位异或
操作数必须是整数。
按二进制计算   
int a = 3;
int b = 5;
printf("%d", a&b );
//按位与,相同为1,不同为0.
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000001
a & b = 1;

printf("%d", a|b );
//按位或,都为0则0,否则为1。
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000111
a | b = 7;

printf("%d", a^b );
//按位异或,相同为0,不同为1.
//00000000000000000000000000000011
//00000000000000000000000000000101
//00000000000000000000000000000110
a ^ b = 6;

练习:交换两个int变量的值,不使用第三个变量,即a=3,b=5; 交换后,a=5,b=3.

方法一:

int a=3;
int b=5;
a = a + b;
b = a - b;
a = a - b;
//数值太大时会溢出。

方法二:

int a=3;
int b=5;
a = a ^ b;
b = a ^ b;
a = a ^ b;

0 ^ a = a;

a ^ a = 0;

四、赋值操作符

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

五、单目操作符

!		逻辑取反
-		负值
+		正值
&		取地址
sizeof()操作数类型长度(字节为单位)
~		对一个数的二进制按位取反
--		自减
++		自增
*		间接访问操作符
(int)	强制类型转换

sizeof() 括号中的表达式并不参加运算。

int a = 10;
int * pa = &a;	//	& -- 取地址操作符
//		pa用来存放地址,pa就是一个指针变量
*pa = 20//	* 是解引用操作符,*pa就是a。

六、关系操作符

>
>=
<
<=
!=
==

七、逻辑操作符

&&		逻辑与
||		逻辑或

例题:

//这串代码输出的结果为?
#include<stdio.h>
int main()
{
	int i = 0,a = 0, b = 2, c = 3, d = 4;
    i = a++ && ++b && d++;
    printf("a = %d\n",a);
    printf("b = %d\n",b);
    printf("c = %d\n",c);
    printf("d = %d\n",d);
	return 0;
}
i = a++ && b++;
//如果前面的 a++ 判断为假, 则后面的 b++ 不会再运算。

i = a++ || b++;
//如果前面为真,则后面不会执行运算,

八、条件操作符

表达式1 ? 表达式2 : 表达式3
    
//如果表达式1为真,则表达式2计算,表达式3不计算。
//如果表达式1为假,则表达式3计算,表达式2不计算。

九、逗号表达式

exp1, exp2, exp3, ...expn
int a = (a>b, a=10, a=b+10, a=29)
//逗号表达式,就是用逗号隔开的多个表达式,从左到右依次运算,整个表达式的结果就是最后一个表达式的结果。

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

1. [] 下标引用操作符

int arr[10];	//	创建数组
arr[9] = 10;	//	使用下标引用操作符

2. () 函数调用操作符

//函数定义
int Add(int a,int b)
{
    return a+b;
}
int main()
{
    int a=10,b=20;
    //函数调用
    int ret = Add(a,b);  // () 为函数调用操作符
}

3. 访问结构成员

结构体是自定义类型。

. : 结构体 . 成员名

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

// struct 定义一个自定义类型
// 书:书名,书号,定价。
struct Book
{
    //成员变量
    char name[20];
    char id[20];
    int price;
};

int main()
{
    struct Book b = {"c语言","20211130",55}; //b 为一个结构体。
    //结构体 . 成员名
    printf("%s",b.name);
    printf("%s",b.id);
    printf("%d",b.price);
    return 0;
}

//22222222222222222222222
struct Book * pb = &b;
printf("%s",*pb.name);
printf("%s",*pb.id);
printf("%d",*pb.price);

//33333333333333333333333
//结构体指针 -> 成员名
struct Book * pb = &b;
printf("%s",pb->name);
printf("%s",pb->id);
printf("%d",pb->price);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值