C语言-操作符详解1--算术操作符 移位操作符 位操作符 赋值操作符

本文详细介绍了C语言中的算术操作符、移位操作符(左移、右移)和位操作符,包括它们的使用规则和实例解析。对于移位操作,分别讨论了逻辑移位和算术移位的区别,以及它们对正数和负数的影响。此外,还阐述了位操作符如按位与、按位或、按位异或的计算方法。
摘要由CSDN通过智能技术生成


前言

C语言中,操作符主要分为以下几类:

1.算术操作符
2.移位操作符
3.位操作符
4.赋值操作符
5.单目操作符
6.关系操作符
7.逻辑操作符
8.条件操作符
9.逗号表达式
10.下标引用、函数调用和结构成员

下面,让我们逐一探究。


一、算术操作符

主要是以下几种:
加(+) 减(-) 乘(*) 除(/) 取余(%)

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

通过以下代码的结果感受/操作符对于整数和小数的处理:

int main()
{
	int a = 6 / 5;
	double b = 6 / 5;
	double c = 6.0 / 5;
	printf("a = %d\n", a);
	printf("b = %f\n", b);
	printf("c = %f\n", c);
}

结果:
在这里插入图片描述

二、移位操作符

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

在说移位操作符之前,我们先需要了解一下一个数的原码、反码和补码。

原码:就是一个数字的二进制码。int型因为有4字节,因此在计算机中它的二进制码有32位。其中最高位是一个数字的符号位,正数为0,负数为1。

注意:规定正数的原码反码补码都相同,负数则不同。

负数的反码和补码规则:
反码:符号位不变,其他位按位取反。
补码:反码+1

在计算机内存中所有数字都是以补码存放的。

左移

左移移位实现过程:
把整个二进制码向左移动,左边超出去后抛弃、右边空出来的地方补0。

以10<<1为例:
二进制码:00000000000000000000000000001010(10)
左移后为:00000000000000000000000000010100(20)

右移

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

  1. 逻辑移位
    左边用0填充,右边丢弃
  2. 算术移位
    左边用原该值的符号位填充,右边丢弃。

对于正数,逻辑移位,算术移位的结果都是一样的。
对于负数则有所不同,我们以-1为例,看看在VS2019中负数右移是怎样的。

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

结果:
在这里插入图片描述
我们发现-1右移1位后结果没有变。
二进制码:11111111111111111111111111111111(-1补码)
右移一位:11111111111111111111111111111111
可以发现,右移后左边补1,是算术移位。

注意:对于正数,可以这样理解它的移位:
左移1位相当于乘2,右移1位相当于除2。

三、位操作符

&   按位与
|   按位或
^   按位异或

注:他们的操作数必须是整数。

下面通过举例来说明是如何进行计算的:

int main()
{
	int a = 3;
	int b = 5;

	int c = a & b;
	int d = a | b;
	int e = a ^ b;

	printf("按位与:%d\n", c);
	printf("按位或:%d\n", d);
	printf("按位异或:%d\n", e);
}

代码运行结果:
在这里插入图片描述
分析:

3的二进制:00000000000000000000000000000011
5的二进制:00000000000000000000000000000101

按位与:按照二进制每一位计算,两个数的相同位做与运算。
3的二进制:00000000000000000000000000000011
5的二进制:00000000000000000000000000000101
3 5按位与:00000000000000000000000000000001(1)

按位或:即两个数的相同位做或运算
3的二进制:00000000000000000000000000000011
5的二进制:00000000000000000000000000000101
3 5按位或:00000000000000000000000000000111(7)

按位异或:即两个数的相同位做异或运算(相同为0,相异为1)
3的二进制:00000000000000000000000000000011
5的二进制:00000000000000000000000000000101
3和5 异或:00000000000000000000000000000110(6)

四、赋值操作符

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

	+=   例:a += 10  ----  a= a+10
	-=
	*=
	/=
	%=
	>>=
	<<=
	&=
	|=
	^=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值