189 8069 5689

C语言——操作符(上)算术、移位、位、赋值操作符-创新互联

操作符(上)
  • 前言
  • 操作符分类
  • 操作符详解
    • 算术操作符
    • 移位操作符
      • 左移操作符
      • 右移操作符
    • 位操作符
    • 赋值操作符
  • 小结

在这里插入图片描述

创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为天柱企业提供专业的成都网站建设、网站制作,天柱网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。前言

前面我们对C语言的一维数组、二维数组的有了一定的了解,今天带大家了解C语言中的操作符。
我们先来看看操作符都有那些>

操作符分类

算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员

我们来逐个探讨探讨>

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

我们来用代码演示一下>

#includeint main()
{//+   -  *  /  %
	int a = 4;
	int b = 2;
	printf("%d\n", a + b);
	printf("%d\n", a - b);
	printf("%d\n", a * b);
	printf("%d\n", a / b);
	printf("%d\n", a % b);
	return 0;
}

在这里插入图片描述

移位操作符

移(2进制)位操作符(整数)

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

补充>
2进制:
整数的2进制表示形式,其实有三种
原码
反码
补码
内存中存储的其实是:补码的二进制
所以在参与移位的时候,移动的都是补码
eg:
12-数值
2进制:1100
8进制:14
10进制:12
16进制:c

int main()
{//按照一个属的正负,直接写出它的二进制表示形式得到的就是原码
	//正数
	//正数的原码、反码、补码是相同的
	//负数的原码、反码、补码要经过计算
	//反码是符号位不变,其他未按位取反,就是反码
	// 补码是反码+1
	//整形占4个字节(32bit)
	//00000000000000000000000000001010-原码
	//00000000000000000000000000001010-反码
	//00000000000000000000000000001010-补码
	int a = 10;

	//10000000000000000000000000001010-原码
	//11111111111111111111111111110101-反码
	//11111111111111111111111111110110-补码
	int b = -10;
	return 0;
}

原、反、补的计算方法
在这里插入图片描述

左移操作符

移位规则:
左边抛弃、右边补0

int main()
{int a = 10;
	int b = a<< 1;
	//00000000000000000000000000001010-补码
	printf("%d\n", b);
	printf("%d\n", a);

	return 0;
}

在这里插入图片描述

在这里插入图片描述
再举一个负数的案例

int main()
{int a = -10;
	//10000000000000000000000000001010
	//11111111111111111111111111110101
	//11111111111111111111111111110110-补码
	int b = a<< 1;

	printf("b=%d\n", b);//-20
	printf("a=%d\n", a);//-10

	return 0;
}

在这里插入图片描述
在这里插入图片描述

我们可以发现左移一次反有一个*2的效果。

右移操作符

移位规则:
首先右移运算分两种:

  1. 逻辑移位
    左边用0填充,右边丢弃
  2. 算术移位 (平常见到)
    左边用原该值的符号位填充,右边丢弃
int main()
{int a = -1;
	//10000000000000000000000000000001
	//11111111111111111111111111111110
	//11111111111111111111111111111111

	int b = a >>1;
	printf("b=%d\n", b);
	printf("a=%d\n", a);

	return 0;
}

在这里插入图片描述
那在编译器中到底是算术右移还是逻辑右移呢,两者区别是左边补的符号位不同,假如结果跟原来的符号相同,那么就是算术右移,反之就是逻辑右移。
我们来看看运行结果>
在这里插入图片描述
很显然在我们vs编译器中是算术右移。
警告⚠
对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:

int num = 10;
num>>-1;//error
位操作符

位操作符有:

& //按位与
| //按位或
^ //按位异或
//注:他们的操作数必须是整数。

这些操作符也是对二进制进行操作的
&操作符

int main()
{int a = 3;
	//00000000000000000000000000000011
	int b = -5;
	//10000000000000000000000000000101
	//11111111111111111111111111111010
	//11111111111111111111111111111011-补码
	int c = a & b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//00000000000000000000000000000011

	printf("%d\n", c);//3

	return 0;
}

在这里插入图片描述
在这里插入图片描述
|操作符

int main()
{int a = 3;
	//00000000000000000000000000000011
	int b = -5;
	//10000000000000000000000000000101
	//11111111111111111111111111111010
	//11111111111111111111111111111011-补码
	int c = a | b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//11111111111111111111111111111011

	printf("%d\n", c);//-5

	return 0;
}

对应的二进制位有1则为1,两个同时为0则为0
在这里插入图片描述
^操作符

//对应的二进制位:相同为0,相异为1
int main()
{int a = 3;
	//00000000000000000000000000000011
	int b = -5;
	//10000000000000000000000000000101
	//11111111111111111111111111111010
	//11111111111111111111111111111011-补码
	int c = a ^ b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//11111111111111111111111111111000

	printf("%d\n", c);//-8

	return 0;
}

对应的二进制位:相同为0,相异为1
在这里插入图片描述

赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

int weight = 120;//体重
weight = 89;//不满意就赋值
double salary = 10000.0;
salary = 20000.0;//使用赋值操作符赋值。
赋值操作符可以连续使用,比如:
int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值
这样的代码感觉怎么样?
那同样的语义,你看看:
x = y+1;
a = x;
这样的写法是不是更加清晰爽朗而且易于调试。

复合赋值符

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

这些运算符都可以写成复合的效果。
比如:

int x = 10;
x = x+10;
x += 10;//复合赋值
//其他运算符一样的道理。这样写更加简洁。

在这里插入图片描述

小结

今天我们学习了算术操作符、移位操作符、位操作符、赋值操作符,相信大家看完有一定的收获。
种一棵树的最好时间是十年前,其次是现在! 把握好当下,合理利用时间努力奋斗,相信大家一定会实现自己的目标!加油!创作不易,辛苦各位小伙伴们动动小手,三连一波~~~,本文中也有不足之处,欢迎各位随时私信点评指正!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:C语言——操作符(上)算术、移位、位、赋值操作符-创新互联
当前路径:http://cdxtjz.cn/article/ceossj.html

其他资讯