操作符详解

操作符和表达式



1.算数操作符

+ - * / %

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

2.移位操作符

<< 左移操作符 >>右移操作符

左移操作符移位规则:

左边抛弃、右边补0

右移操作符移位规则:

首先右移运算分两种
1.逻辑移位 左边用0填充,右边丢弃
2.算术移位 左边用原该值的符号位填充,右边丢弃

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

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

3.位操作符

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

小试牛刀(一道变态的面试题)
实例1:
不能创建临时变量(第三个变量),实现两个数的交换。
解法一:

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	a = a^b;
	b = a^b;
	a = a^b;
	printf("a = %d b = %d\n", a, b);
	return 0;
}

解法二:
如果不考虑溢出的话,倒是可以用这种方法求解

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 10;
	int b = 20;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a = %d b = %d\n", a, b);
	system("pause");
	return 0;
}

实例2:
求一个整数存储在内存中的二进制中1的个数。
基本思路就是遍历这个整数的每一个bit位,判断这个bit位是1还是0.如果是1,count++就行了。

基本思路
依次取1,10,100…这些数字和num进行按位与
取1运算时,相当于把num的最后一位取出来了
取10运算时,相当于把num的倒数第二位取出来了

#include<stdio.h>
#include<stdlib.h>
int countBit(int num)
{
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if (num & (1 << i))
		{
			count++;
		}
	}
	return count;
}
int main()
{
	int num = 0;
	scanf_s(" %d", &num);
	int ret = countBit(num);
	printf(" %d \n", ret);
	system("pause");
	return 0;
}

4.赋值操作符

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

int weight = 120;//这个是初始化
weight = 89;//这个是赋值操作

注:
要明确区分赋值和初始化。
比如对于const修饰的变量,只能初始化,不能赋值

5.单目运算符

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

注意:
sizeof不是函数,而是操作符。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李憨憨_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值