操作符的详细解释

一.算数操作符

+:加

 -:减

*:乘

/:除

%:取余

1.注意加减乘除时候的类型匹配,匹配的类型不同,则计算结果是不一样的

2.除法的注意事项:注意除数不能为0

3.取余%:只能用于整数,整数相除,得到余数

二.移位操作符

移位操作符的操作数只能是整数,作用的是整数的二进制位

(一)整数的三种编码方式

整数的原码、反码和补码是计算机中表示整数的三种编码方式

1.原码:32位比特位,第一位表示符号位,其余位表示真值。正数的原码、补码、反码相同。正数的符号位为0,负数的符号位为1.其余各位为该数绝对值的二进制表示

2.反码:正数的反码和原码相同,负数的反码是在原码的基础上,符号位不变,其余各位按位取反(即1变0,0变1)反码其实是原码到补码的一个过渡,主要用于简化原码到补码的计算

3.补码:正数的补码与原码、反码相同。负数的补码是在其反码的基础上加1(注意:符号位不参与运算)补码是计算机内部存储和运算整数的实际编码方式,它使得计算机能够直接进行二进制数的加减运算

4.原码到补码的计算

(1)正数的原码、反码、补码是相同的

(2)负数:符号位不改变,其余位取反加一

(3)负数的原码到补码有种简便计算:

从右向左,遇到的第一个1及其右边不改变,其他位按位取反,符号位不改变。

补码到原码的逆运算也是这样

(二)左移

左移的规则:左边抛弃,右边补0

左移的效果:值扩大两倍

#include<stdio.h>

int main()
{
	int a = -10;
	//原码:10000000000000000000000000001010
	//补码:11111111111111111111111111110110

	int b = a << 1;
	//补码:11111111111111111111111111101100
	//原码:10000000000000000000000000010100

	printf("%d\n", a);
	printf("%d\n", b);
	//计算机当中存储和运算的是补码
	//但是printf函数打印出来的是原码
    //b是a移位之后的效果,但是a的值未发生改变

	return 0;
}

(三)右移

1.逻辑右移

移动规则:右边丢弃,左边补0

2.算数右移

移动规则:右边丢弃,左边补符号位

#include <stdio.h>

int main()
{
	int m = -1;
	//原码:10000000000000000000000000000001
	//补码:11111111111111111111111111111111
	int n = m >> 1;
	//补码:11111111111111111111111111111111
	//原码:10000000000000000000000000000001
	printf("%d\n", m);
	printf("%d\n", n);

	return 0;
}

三.位操作符

位操作符作用于二进制位

1.按位与 &

运算规则:只有两个数对应的二进制位都为1时,结果位才是1,否则为0

//代码举例
#include<stdio.h>

int main()
{
	int a = 3;
	//补码:00000000000000000000000000000011
	int b = -5;
	//原码:10000000000000000000000000000101
	//补码:11111111111111111111111111111011
	int c = a & b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//00000000000000000000000000000011(运算的补码)
	//正数的原码、反码、补码是相同的
	printf("%d", c);
	return 0;
} 

2.按位或 |

运算规则:只要其中一个二进制位为1,结果位就为1


#include<stdio.h>

int main()
{
	int a = 3;
	//补码:00000000000000000000000000000011
	int b = -5;
	//原码:10000000000000000000000000000101
	//补码:11111111111111111111111111111011
	int c = a | b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//11111111111111111111111111111011(运算的补码)
	//10000000000000000000000000000101 (还原的原码)
	//正数的原码、反码、补码是相同的
	printf("%d", c);
	return 0;
}

3.按位异或 ^

(1)运算规则:参与运算的两个数,如果两个对应的二进制位值不一样,则结果位1,否则为0

#include<stdio.h>

int main()
{
	int a = 3;
	//补码:00000000000000000000000000000011
	int b = -5;
	//原码:10000000000000000000000000000101
	//补码:11111111111111111111111111111011
	int c = a ^ b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//11111111111111111111111111111000(运算的补码)
	//10000000000000000000000000001000 (还原的原码)
	//正数的原码、反码、补码是相同的
	printf("%d", c);
	return 0;
}

(2)异或的相关性质

恒等律:任何数和0异或,结果仍然是原来的数

归零律:任何数和自身异或结果都为0

交换律:A^B=B^A

四.赋值操作符

1.赋值操作符的作用:顾名思义,给变量赋上合适的值

2.区别赋值和等于:赋值操作符:“=”;等于“==”

3.复合赋值

具有运算和赋值的双重作用

+=:具有加和赋值的双重作用
-=:具有减和赋值的双重作用
*=:具有乘和赋值的双重作用
/=:具有除和赋值的双重作用
%=:具有取余和赋值的双重作用
>>=:具有右移和赋值的双重作用
<<=:具有左移和赋值的双重作用
&=:具有按位与和赋值的双重作用
|=:具有按位或和赋值的双重作用
^=:具有按位异或和赋值的双重作用
#include <stdio.h>

int main()
{
	int x = 10;
	x = x + 10;
	x += 10;//复合赋值
	//其他复合赋值运算符一样的道理
	return 0;
}

五.单目操作符

1.逻辑反操作符:!

2.正值和负值:+   -

3.取地址:&

4.计算操作数的类型长度(以字节为单位):sizeof

(1)sizeof后面的括号的省略

#include<stdio.h>

int main()
{
	int a = 10;
	printf("%d", sizeof(a));
	printf("%d", sizeof a);//sizeof后的括号,如果是用来计算变量的类型长度,可以省略
	printf("%d", sizeof(int));//但如果是直接计算类型的话,必须要加上括号
	return 0;
}

(2)sizeof后面括号里的运算不会影响最终变量的值

(3)sizeof不是函数,只是一个编译操作符,而不是一个运行时函数

5.对一个数的二进制位按位取反:~

6.前置、后置++: ++

(1)前置++和后置++的区别

(2)前置++和后置++与赋值加一的区别:前置和后置++具有副作用,会改变变量原来的值

7.前置、后置--: --

前置、后置--的用法和前置、后置++的作用一样

8.间接访问操作符(解引用操作符):*

访问指针所指向的内存地址中的值

#include<stdio.h>

int main()
{
	int a = 10;
	int* p = &a;//p是指向a的地址
	int b = *p;//解引用p,获取a的值,并将该值赋给b
	return 0;
}

9.强制类型转换:(类型)

六.关系操作符

用来判断大于、小于、等于和不等于的操作符

<

>

<=

>=

!=:用于测试“不相等”

==:用于测试“相等”

七.逻辑操作符

1.逻辑与:&&

(1)运算规则:如果两个操作数都为真,则结果为真,否则,结果为假

(2)短路现象:

#include<stdio.h>

int main()
{
	int i = 0;
	int a = 0;
	int b = 2;
	int c = 3;
	int d = 4;
	i = a++ && ++b && d++;
	//逻辑与的短路现象:
	//从左往右的操作数,如果其中一个操作数是0,则右边的运算不再进行
	printf("a = %d\nb = %d\nc = %d\nd = %d", a, b, c, d);
	return 0;
}

2.逻辑或:||

(1)运算规则:如果两个操作数当中至少有一个为真,则结果为真,如果两个都为假,则结果为假

(2)短路现象:

#include<stdio.h>

int main()
{
	int i = 0;
	int a = 0;
	int b = 2;
	int c = 3;
	int d = 4;
	i = ++a || ++b || d++;
	//逻辑或的短路现象:
	//从左往右的操作数,如果其中一个操作数是1,则右边的运算不再进行
	printf("a = %d\nb = %d\nc = %d\nd = %d", a, b, c, d);
	return 0;
}

八.条件操作符

1.运算规则:

exp1 ? exp2 : exp3
真     计算   不计算
假    不计算   计算

2.条件操作符又叫做三目操作符,可以简化一般的分支语句

#include<stdio.h>

int main()
{
	int a = 1;
	int b = 2;
	int i = 0;

	if (a < b)
		i = a;
	else
		i = b;
	//以上的if else语句可以用三目操作符进行简化
	i = (a < b ? a : b);
	
	return 0;
}

九.逗号表达式

1.运算规则:逗号表达式,就是用逗号隔开的多个表达式,从左往右依次进行,整个表达式的结果就是最后一个表达式的结果

2.逗号表达式的应用:多个运算,递进运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值