[C语言初阶]操作符(1)

一. 引言

  在C语言里,操作符处于核心且基础的重要地位,它们贯穿于程序设计的各个层面,对程序的实现和功能起着关键作用,接下来我将会介绍一些操作符来学习C语言。

二. 分类

2.1   算术操作符

 2.1.1   除(/)

当操作数都为整数时,执行整数除法,结果也为整数,向零取整。 例如 1/2 ,1 除以 2 商为 0.5,但在整数除法中会舍去小数部分,结果是0。

1/2 = 0

  如果两个数中有一个为小数,答案就成了小数。

1.0/2 = 0.5

 2.1.2   取模(%)

用于求两个整数相除的余数,要求两个操作数都必须是整数。 例如1%2 ,即计算 1 除以 2 的余数,1 除以 2 商 0 余 1,所以结果是1。 同时,取模两端必须是整数。

1%2 = 1

 2.2   移位操作符

  移位操作符移动的是二进制位。

  整数在内存中存储的是补码。

整数二进制 原码
反码
补码

  在C语言中,如果是正数,它的原码,反码,补码相同。

1
原码:00000000000000000000000000000001
反码:00000000000000000000000000000001
补码:00000000000000000000000000000001

  如果是负数,原码为,第一位看成是符号位为1,其他位是有效位,反码为,除了符号位,其他位取反,补码为,反码+1。

-1
原码:10000000000000000000000000000001
反码:11111111111111111111111111111110
补码:11111111111111111111111111111111

2.2.1   左移(<<)

  左边丢弃,右边补0。

int a = 1;
int b = a << 1;

a
原 = 反 = 补
00000000000000000000000000000001
b为
00000000000000000000000000000010

  如果是负数也一样,但是移位操作符只对整数。

2.2.2   右移(>>)

  算术移位:右边丢弃,左边补原符号位。

  逻辑移位:右边丢弃,左边补0。

  但是一般情况下,编译器都是按照算术移位进行运算的。

  无符号整数理解为正数。

2.3   位操作符

  用补码作比较。

2.3.1   按位与(&)

  同时为1才为1。

a 1:00000000000000000000000000000001
b 2:00000000000000000000000000000010
结果:00000000000000000000000000000000

2.3.2   按位或(|)

  同时为0才为0。

a 1:00000000000000000000000000000001
b 2:00000000000000000000000000000010
结果:00000000000000000000000000000011

2.3.3   按位异或(^)

  相同为0,相异为1。

a 1:00000000000000000000000000000001
b 2:00000000000000000000000000000010
结果:00000000000000000000000000000011

  重点: 异或支持交换律,只适用于整型,负数也可以。

a^a = 0;
0^a = a;

三.问题求解

3.1   问题一

3.1.1   问题

  不创建临时变量,实现两个数的交换。

3.1.2   方法求解

#include 

int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a = %d,b = %d\n", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("交换后:a = %d,b = %d", a, b);
	return 0;
}

3.2   问题二

3.2.1   问题

  编写一段代码,实现求一个整数存储在内存中的二进制位的个数。

3.2.2   方法求解

#define _CRT_SECURE_NO_WARNINGS
#include 

int main()
{
	int a = 0;
	int i = 0;
	int count = 0;
	scanf("%d", &a);
	for (i = 0;i < 32;i++)
	{
		if ((a & 1) == 1)
		{
			count++;
		}
		a = a >> 1;//a >>= 1;
	}
	printf("%d", count);
	return 0;
}

你可能感兴趣的:(算法)