部分C语言操作符解释

C语言的操作符有以下几种:

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号操作符
  • 下标引用,函数调用和结构成员

本次解释一下算术操作符,移位操作符,位操作符

算术操作符

一般分为五种:+ - * / %

 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 1+1;			//    +
	printf("和是%d\n", a);

	int b = 2 - 1;			//    -
	printf("差是%d\n", b);

	int c = 2 * 2;			//    *
	printf("积是%d\n", c);

	float d = 6.0 / 5;		//    1:/
	printf("a=%f\n", d);	

	float e = 6 / 5.0;		//    2:/
	printf("b=%f\n", e);
	
	float f = 6.0 / 5.0;	//    3:/
	printf("c=%f\n", f);
	
	float g = 6.0f / 5.0f;	//    4:/
	printf("d=%f\n", g);
	
	return 0;
}

移位操作符

移位操作符是以二进制来算的

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

把整数 2 左移一位得(       )?

x86是32位,x64是64位,这里以32位算

首先把 2 换算成二进制:

00000000000000000000000000000010,按照左移移出位舍弃,空位添0,那么是这样的

0000000000000000000000000000010,最左边舍弃一位(可以拿尺子比一下),最右边少了一位所以右边加一个0得:

00000000000000000000000000000100,换算为十进制是 4,所以括号处填 4

把整数 4 右移一位得(       )?

首先把 4 换算成二进制:

00000000000000000000000000000100,按照右移移出位舍弃,空位添0,那么是这样的

0000000000000000000000000000010,最右边舍弃一位(可以拿尺子比一下),最左边少了一位所以左边加一个0得:

00000000000000000000000000000010,换算为十进制是 2,所以括号处填 2

原码,反码,补码

原码:整数的二进制位

反码:符号位不变,其他位按位取反                (最高位“1”为负数,“0”为正数)

补码:反码+1                                        

比如:

原码:10000000000000000000000000000001                -1的二进制

反码:11111111111111111111111111111110                        取反

补码:11111111111111111111111111111111                        反码+1

所以 -1 的的补码是 0

算术右移补原符号位,逻辑右移补0

位操作符

&        按位与                按(2进制)位与                0+1=0        1+1=1

|        按位或                按(2进制)位或                0+1=1        1+1=1

^        按位异或                按(2进制)位异或                相同为0,相异为1

按位与

 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	int c = a & b;
	printf("c = %d", c);

	return 0;
}

3 = 00000000000000000000000000000011
5 = 00000000000000000000000000000101
c = a & b = 00000000000000000000000000000001

结果c = 1

按位或

 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	int c = a | b;
	printf("c = %d", c);

	return 0;
}

3 = 00000000000000000000000000000011
5 = 00000000000000000000000000000101
c = a | b = 00000000000000000000000000000111

结果c = 7

按位异或

 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	int c = a ^ b;
	printf("c = %d", c);

	return 0;
}

3 = 00000000000000000000000000000011
5 = 00000000000000000000000000000101
c = a ^ b = 00000000000000000000000000000110

结果c = 6


例题:有两个整数 3 和 5 ,在不创建第三个变量的情况下交换位置。

 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	printf("交换前a=%d b=%d", b, b);
	a = a + b;	//3=3+5
	b = a - b;	//5=3-5
	a = a + b;	//3=3+5
	printf("交换后a=%d b=%d", b, b);	
	//结果:交换前a=3 b=5
          //交换后a=5 b=3
	return 0;
}

这种方法有bug,数值太大会溢出!!!

可以选择这种方法:异或一下

 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	printf("a=%d b=%d", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d b=%d", a, b);

	return 0;
}

 所以这种方法更为简便,同样可以不创建第三个变量交换位置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值