栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

部分C语言操作符解释

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

部分C语言操作符解释

C语言的操作符有以下几种:
  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号操作符
  • 下标引用,函数调用和结构成员
本次解释一下算术操作符,移位操作符,位操作符 算术操作符

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

 #define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
	int a = 1+1;			//    +
	printf("和是%dn", a);

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

	int c = 2 * 2;			//    *
	printf("积是%dn", c);

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

	float e = 6 / 5.0;		//    2:/
	printf("b=%fn", e);
	
	float f = 6.0 / 5.0;	//    3:/
	printf("c=%fn", f);
	
	float g = 6.0f / 5.0f;	//    4:/
	printf("d=%fn", 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
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
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
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
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
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;
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971832.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号