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

C语言操作符

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

C语言操作符

C语言操作符

目录

C语言操作符

1.位操作符

2.赋值操作符

3. 单目操作符

4.关系操作符

5.逻辑操作符

6.条件操作符

7.逗号操作符 

8.下标引用,函数调用操作符

9.访问结构成员操作符 


1.位操作符

*注意:位操作符是针对补码进行操作的

a.按位与

  符号:&

  规则:有假则假

  按位与指两个数的二进制位进行比较,不同为0,相同为1.例如十进制3与5,3&5的结果为应为10进制数字1.    -3&-5的结果应为十进制-7.附上二进制计算过程和验证代码①如下:

  ①.计算过程:

  3和5:

  3的二进制补码为:00000000000000000000000000000011

  5的二进制补码为:00000000000000000000000000000101

  3&5的二进制补码:00000000000000000000000000000001,对应十进制应为1

  -3和-5:

  -3的二进制补码为:111111111111111111111111111111111101

  -5的二进制补码为:111111111111111111111111111111111011

  -3&-5的二进制补码为:111111111111111111111111111111111001,对应的十进制数应为-7.

  验证代码:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = -3;
	int b = -5;
	int c = a & b;//注意对象,补码
	printf("%dn", c);
	return 0;
}

b.按位或

  符号:|

  规则:有真则真

  按位或是指将两个数的二进制位进行比较,只要有1则为1,否则为0. 3|5的结果为应为10进制数字7.    -3|-5的结果应为十进制-1.附上二进制计算过程和验证代码②如下:

  ②计算过程:

  3和5:

  3的二进制补码为:00000000000000000000000000000011

  5的二进制补码为:00000000000000000000000000000101

  3&5的二进制补码:00000000000000000000000000000111,对应十进制应为7

  -3和-5:

  -3的二进制补码为:111111111111111111111111111111111101

  -5的二进制补码为:111111111111111111111111111111111011

  -3&-5的二进制补码为:111111111111111111111111111111111111,对应的十进制数应为-1.

  验证代码:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = -3;
	int b = -5;
	int c = a | b;//针对补码
	printf("%dn", c);
	return 0;
}

c.按位异或

  符号:^

  规则:同假异真

  按位异或是指将两个数的二进制位进行比较,相同为0,不同为1 .十进制数字 3^5的结果为应为10进制数字6.    -3^-5的结果应为十进制6.附上二进制计算过程和验证代码③如下:

  ②计算过程:

  3和5:

  3的二进制补码为:00000000000000000000000000000011

  5的二进制补码为:00000000000000000000000000000101

  3^5的二进制补码:00000000000000000000000000000110,对应十进制应为6

  -3和-5:

  -3的二进制补码为:111111111111111111111111111111111101

  -5的二进制补码为:111111111111111111111111111111111011

  -3^-5的二进制补码为:00000000000000000000000000000110,对应的十进制数应为6

  验证代码③:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = -3;
	int b = -5;
	int c = a ^ b;//补码符号位发生变化
	printf("%dn", c);
	return 0;
}

2.赋值操作符

a.赋值操作符

  符号:=

  注意事项:区分“==”判断运算符

  例子:例如a=5是将5的值赋值给变量a,而a==5是判断a与5是否相等

3. 单目操作符

下面对主要的单目操作符进行介绍:

  a.逻辑反操作:

  符号:!

  以下列代码进行解释:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = 1;
	if (a)
	{
		printf("加油n");
	}
	if (!a)
	{
		printf("一起加油n");
	}
	return 0;
}

  将变量a初始化为1,那么if(a)为真,则程序的执行结果为“加油”。if(!a)为假,那么不执行这if里的语句。逻辑反“!”即将真转化为假,假转换为真。如果将上面a的值初始化为0,那么程序的执行结果应该为”一起加油“。

  b. 取地址操作符/(简介访问操作符)解引用操作符

   符号:&/*

   以下列代码进行解释:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = 10;
	int* p = &a;
	*p = 20;
	printf("%dn", a);
	return 0;
}

  &a将a变量的地址取出存放在指针变量p中,*p即指将通过p中存放的地址找到变量a,*p=20相当于a=20。

c.操作数的类型长度

注意事项:计算变量类型的长度,以字节为单位。

符号:sizeof

以代码进行解释:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = 10;
	char c = '8';
	int* p = &a;
	int arr[10] = { 0 };
	printf("%dn", sizeof(a));//打印整型a的字节长度,结果为4
	printf("%dn", sizeof(int));//或者	printf("%dn", sizeof a );但是当sizeof后是变量类型时括号不可以省略,结果也为4

	printf("%dn", sizeof(c));//结果为1
	printf("%dn", sizeof(char));//结果为1

	printf("%dn", sizeof(p));//指针变量,结果为4
	printf("%dn", sizeof(int*));结果为4

	printf("%dn", sizeof(arr));//结果为40,10个元素,每个元素4个字节
	printf("%dn", sizeof(int [10]));//结果为40
	return 0;
}

d.对一个数的二进制位取反

符号:~

即对一个数的二进制位取反,包括符号位,注意操作对象是补码。例如:~(-3)=2,下面是计算过程:

原码:10000000000000000000000000000011

反码:11111111111111111111111111111100

补码: 11111111111111111111111111111101

按位取反后:00000000000000000000000000000010,对应的十进制数为:2

验证代码:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = -3;
	printf("%dn", (~a));
	return 0;
}

e. 自增,自减运算符

符号:++,--

注意:前置后置的区别

直接上代码:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = 10;
	printf("%dn", a);//打印结果为10
	printf("%dn", a++);//后置++,先使用,再++       打印结果为10,a的值变为11
	printf("%dn", ++a);//前置++,先++,再使用       打印结果为12
	printf("%dn", a);//经过a++,++a,打印结果为12
	return 0;
}

f.强制类型转换

符号:(类型)

直接看代码:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	double a = 3.1415;
	int b = (int)a;//(int)将double类型的3.1415转换为整型3赋值给整型变量b
	printf("%dn", b);
	return 0;
}

 4.关系操作符

   

 注意:判断相等是“==”

5.逻辑操作符

a.逻辑与

符号:&&

两者比较,同为真,才为真

代码解释:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = 3;
	int b = 5;
	int c = a && b;//a=3为真,b=5也为真,于是c也为真,即返回1
	printf("%dn", c);
	return 0;
}

 若将a/b中任意一者或者都改为0,那么a&&b为假输出结果为0

b.逻辑或

符号:||

两者比较,一方为真则为真

代码解释:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = 1;
	int b = 0;
	int c = a || b;//a为真,b为假。但是a||b为真,于是输出1
	printf("%dn", c);
	return 0;
}

若将a的值也改为0,那么二者均为假,a||b也为假,输出0

6.条件操作符

 符号:exp1?exp2:exp3(三目操作符)

 即条件1成立,表达式2即为表达式1的值,否则为表达式2的值

 代码解释:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = 0;
	int b = 0;
	int c = (a > b ? 4 : 6);//很显然a>b为假,于是6即为表达式的值
	printf("%dn", c);
	return 0;
}

7.逗号操作符 

 符号如上:

 规则:从左到右依次计算表达式的值,最后一个表达式的值为整个表达式的值。

 代码解释:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
int main()
{
	int a = 10;
	while (a -= 2, a -= 1,a>0)//最后一个表达式的值为整个表达式的值,于是这个循环应当共进行3次,第一次,a=7;第二次,a=4;第三次,a=1;第4次,a<0结束循环
	{
		printf("加油n");
	}
	return 0;
}

 8.下标引用,函数调用操作符

符号:下标引用操作符:[ ],函数调用操作符:()

规则:略

注意:操作数。

例如:arr[4],下标引用操作符"[ ]"的操作数为数组和’4‘;get_xb(a,b)函数调用操作符“()”的操作数为函数get_xb,a,b。

9.访问结构成员操作符 

符号:.和->

使用:结构体变量.成员名    结构体指针变量->成员名

代码解释:

①.结构体变量.成员名

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
//创建一个结构体变量
struct stu
{
	//描述结构体变量的成员变量
	char name[25];
	int age;
	char num[20];
};
int main()
{
	struct stu s1 = { "小明",19,"2109060606" };
	printf("%sn", s1.name);
	return 0;
}

②.结构体指针变量->成员名

#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include
//创建一个结构体变量
struct stu
{
	//描述结构体变量的成员变量
	char name[25];
	int age;
	char num[20];
};
int main()
{
	struct stu s1 = { "小明",19,"2109060606" };
	struct stu* ps = &s1;//创建一个struct stu型的指针变量来存放该类型变量s1的地址
	printf("%sn", ps->name);//访问时,结构体指针变量->成员名
	return 0;
}

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

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

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