c语言-操作符1


前言

本篇文章介绍c语言中的各种操作符以及操作符的运用案例。


一、赋值操作符

赋值操作符用于对变量进行初始化或赋值

名称符号
赋值=

二、算术操作符

算术操作符是在数学运算中使用的符号,用于执行基本的四则运算,常见算术操作符如下:

名称符号
+
-
*
/
取模%
// 算术操作符
// + - * / %
int main()
{

	 /除号
	//int a = 2;
	//double b = 1.0 / 2;  //转换成double
	//double c = 1 / 2.0;
	//printf("%lf %lf", b, c);

	// % 取模运算,操作数为必须为整数
	int a = 10;
	int b = 10 % 3;
	printf("%d", b);
  
  return 0;
}

三、移位操作符

操作对象:整型和字符型

前置知识

整数的二进制编码表示由三种:原码、反码、补码
正整数的原码、反码、补码相同
对于负整数,反码 = 原码的最高位不变(符号位不变),其余按位取反
补码 = 反码+1
整数在内存以补码的方式存储
例如 a = 3, a的二进制(32位机器)
a 的原码、反码、补码00000000 00000000 00000000 00000011
b = -5;
b的原码 10000000 00000000 00000000 00000101
b的反码 11111111 11111111 11111111 11111010
b的补码 11111111 11111111 11111111 11111011

名称符号
左移<<
右移>>

左移的运算规则:左边丢弃,右边补0
右移分两种:
1.算术右移:右边丢弃,左边补原符号位
2.逻辑右移:右边丢弃,左边补0
右移由使用的编译器决定采用哪种方式,大部分采用算术右移。

int main()
{
	int a = 3;
	//00000000 00000000 00000000 00000101
	a = 3 << 1;
	//00000000 00000000 00000000 00001010
	printf("%d\n",a);
	int b = -5;
	//11111111 11111111 11111111 11111011
	b = b >> 1;
	//11111111 11111111 11111111 11111101
	printf("%d", b);
	return 0;
}

四、位操作符

操作对象:整型和字符型

名称符号
按位(二进制)与运算&
按位(二进制)或运算|
按位(二进制)异或运算^.
按位(二进制)取反运算~

位操作符的案例

  1. 求一个整数存储在内存中的二进制中1的个数(32位机器)
    内存中的二进制其实就是求补码的1的个数
    思路:假设这个数为n
    步骤一, n = n & 1
    步骤二,n = n>> 1
    步骤三,重复循环步骤一和步骤二32次并统计1的个数
int count_2scomplement(int number)
{
	int count = 0;
	int rightMoveTimes = 32;//比较次数
	while (rightMoveTimes > 0)
	{
		if (number & 1)
			count++;
		number = number >> 1;
		rightMoveTimes--;
	}
	return count;
}
  1. 或操作符和左移操作符的使用,将某个二进制位置1
    题目:假设a = 9,将a的二进制的右边第三位置1
int main()
{
	int a = 9;
	//00000000 00000000 00000000 00001001
	//将右边第3位置1
	int b = 1;
	//00000000 00000000 00000000 00000001
	//将b左移2位
	b = b << 2;
	//00000000 00000000 00000000 00000100  b
//  | 00000000 00000000 00000000 00001001  a
	//00000000 00000000 00000000 00001101  a
	a = b | a;

	printf("a = %d", a);

	return 0;

}
  1. 与操作符和取反操作符的使用,将某个二进制位置0
    假设 a = 13,将a的二进制右边第三位置0
int main()
{
	int a = 13;
	//00000000 00000000 00000000 00001101
	//将右边第三个位置0

	int b = 1;
	//00000000 00000000 00000000 00000001
	//b左移2位
	b = b << 2;
	//00000000 00000000 00000000 00000100
	//取反~
	b = ~b;
	//11111111 11111111 11111111 11111011
	a = a & b;
	//00000000 00000000 00000000 00001101  a
 // & 11111111 11111111 11111111 11111011  b
	//00000000 00000000 00000000 00001001
	printf("a = %d",a);
	return 0;
}
  1. 利用异或操作符不使用临时变量交换两个变量的值
int main()
{
	int a = 3;
	int b = 5;
	printf("before swap: a = %d b = %d\n", a, b);
	//方式一
	//局限性:a+b的值可能溢出
	/*a = a + b;
	b = a - b;
	a = a - b;*/

	//方式二
	//原理: 5^5 = 0   0^5 = 5  ^符合交换律
	//局限性:只能用于整数的交换
	a = a ^ b;  //3^5
	b = a ^ b;  //3^5^5 = 3^0 = 3
	a = a ^ b;  //3^5^3 = 3^3^5 = 0^5 = 5
	printf("after swap: a = %d b = %d", a, b);


	return 0;
}

五、关系操作符

名称符号
大于>
小于<
等于==
大于等于>=
小于 等于<=
不等于!=

总结

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值