C语言操作符基础知识及简单编程题

1.操作符分类:

算数操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号操作符

下标引用、函数调用和结构成员

2.算术操作符

+   -   *   /   %

ps:

1. 除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。

2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除 法。

3.%操作符的两个操作数必须为整数。返回的是整除之后的余数。

3.移位操作符

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

4.位操作符

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

异或运算:若ab两数计算,ab两数相同,异或结果为0,否则ab两数不相同,结果为1

5.赋值操作符

=    //赋值操作符

 复合操作符:一类C/C++独有的复合赋值运算符。它们实际上是一种缩写形式,使得对变量的改变更为简洁。

+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 模运算赋值
<<= 左移赋值
>>= 右移赋值
&= 位逻辑与赋值
|= 位逻辑或赋值
^= 位逻辑异或赋值

例如:

Total=Total+3;

它的意思是本身的值加3,然后在赋值给本身。为了简化,上面的代码也可以写成:

Total+=3;

6. 单目操作符

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

对于前置与后置的区别:

例如i++

后置是先用再加,即先进行当前运算然后再进行自加

而前置是先加后用

7.关系操作符

>
>=
<
<=
!=   用于测试“不相等”
==   用于测试“相等”

ps:需要注意=赋值符号与==相等符号关系

8.逻辑操作符

&& 逻辑与
|| 逻辑或

9. 条件操作符

exp1 ? exp2 : exp3

该操作符使用时:exp1表达式为真时执行exp2,exp1表达式为假则执行exp3

10.逗号表达式:

exp1, exp2, exp3, …expN

逗号表达式:

就是用逗号隔开的多个表达式。从左向右依次执行。整个表达式的结果是最后一个表达式的结果

11.操作符属性

复杂表达式的求值有三个影响的因素。

1.操作符的优先级

2.操作符的结合性

3.是否控制求值顺序

两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。 操作符优先级

 

常见简单编程题

1.求两个数二进制中不同位的个数

编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?

输入例子:1199   2299

输出例子:7

思路:

1. 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1

2. 统计异或完成后结果的二进制比特位中有多少个1即可


int main()
{
	int a = 0;
	int b = 0;
	scanf_s("%d %d", a, b);
	printf("请输入两个所要比较的数字");
	int c = a ^ b;     //c代表a和b相异或后有多少不同就有多少个1
	int count = 0;

	while (c != 0) 
	{
		count++;
		c = c & (c - 1);
	}
	printf("共有%d个不同的数字", count);
	return 0;
}

2.打印整数二进制的奇数位和偶数位

获取一个整数二进制序列中的偶数位和奇数位,分别打印出二进制序列

思路:

1. 提取所有的奇数位,如果该位是1,输出1,是0则输出0

2. 以同样的方式提取偶数位置

        检测num中某一位是0还是1的方式:

         1. 将num向右移动i位

         2. 将移完位之后的结果与1按位与,如果:

               结果是0,则第i个比特位是0

               结果是非0,则第i个比特位是1

void print(int num) 
{
	for (int i = 31; i >=1 ; i = i-2)             
	{
		printf("%d ", ((num >> i) & 1));             //num向右移动i位和1相与,提取出偶数位
				
	}
	printf("\n");
	
	for (int i = 30; i >= 0; i = i - 2)              //num向右移动i位和1相与,提取出奇数位
	{
		printf("%d ", ((num >> i) & 1));
	}
	printf("\n");

}

3.统计二进制中1的个数

写一个函数返回参数二进制中1的个数

例如:15  00001111

输出的值应为4个1

void cal(int num) 
{
	int count = 0;
	for (int i = 0; i <32 ; i++) 
	{
		if (((num >> i) & 1) == 1)
		{
			count++;
		}
	}
	printf("共有%d个1", count);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值