C语言中操作符详解

C语言中的操作符是用于执行特定操作(如算术运算、逻辑判断、位操作等)的符号。它们可以作用于变量、常量、表达式等,以产生新的值或执行特定的动作。C语言中的操作符可以分为多个类别,包括算术操作符、关系操作符(或比较操作符)、逻辑操作符、位操作符、赋值操作符、条件操作符、逗号操作符等。

1.算术操作符

  • : 加法
  • : 减法
  • : 乘法
  • : 除法
  • : 取模(求余数)
int main()
{
	int a= 6 / 5;   //取整:得到的结果为1
	printf("%d\n", a);

	float b = 6.0 / 5;   //只要除号两边有一个小数,得到的结果就为小数
	printf("%f\n", b);

	int c = 7 % 3;  //取模:得到的结果为1
	printf("%d\n", c);

	return 0;
}

2.移位操作符

  • <<  : 左移操作符(左边丢弃,右边补0);
  •  >> : 右移操作符:算术右移(右边丢弃,左边补原符号位);逻辑右移(右移丢弃,左边补0)
int main()
{
	int a = 2;       //00000000 00000000 00000000 00000010
	int b = a << 1;  //把a的二进制位向左移动一位:00000000 00000000 00000000 00000100
	printf("b = %d\n", b);
	
	int c = 10;      //00000000 00000000 00000000 00001010
	int d = c >> 1;  //00000000 00000000 00000000 00000101
	printf("d = %d\n", d);

	int e = -1; //负数存放的是二进制的补码
	//原码:10000000 00000000 00000000 00000001
    //反码:11111111 11111111 11111111 11111110
    //补码:11111111 11111111 11111111 11111111

	int f = e >> 1;  //11111111 11111111 11111111 11111111
	printf("f = %d\n", f);

	return 0;
}

3.位操作符

  • & :按位与:二进制位同为“1”,结果为“1”,否则为0;
  •  |  :按位或:二进制位只要有一个为1,其值为1。
  • ^  :按位异或:若两个对应二进制位值不同(一为0,一为1),则该位结果为1,否则为0。
  • int main()
    {
    	int a = 3;      //00000000 00000000 00000000 00000011
    	int b = 5;      //00000000 00000000 00000000 00000101
    	int c = a & b;  //00000000 00000000 00000000 00000001 - 1
    	int d = a | b;  //00000000 00000000 00000000 00000111 - 7
    	int e = a^b;    //00000000 00000000 00000000 00000110 - 6
    	printf("c = %d\n", c);
    	printf("d = %d\n", d);
    	printf("e = %d\n", e);
    
    	return 0;
    }

    4.赋值操作符

  • 单赋值符:= (一个等号为赋值,两个等号为判断是否相等)
  • 复合赋值符:+= 、-=、*=、/=、%=、>>=、<<=、&=、|=、^=5.单目操作符
int main()
{
	int a = 10;
	a = 100; 

	a = a + 100;  //和下面的一样
	a += 100;

	return 0;
}

 5.单目操作符

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

(1)取反 - !

int main()
{
	int flag = 0;   //1为真,0为假
	//flag为真,打印hehe
	if (flag)
	{
		printf("hehe\n");
	}
	//flag为假,打印haha
	if (!flag)
	{
		printf("haha\n");
	}
	return 0;
}

(2)负值 - -

int main()
{
	int a = 10;
	a = -a;
	printf("%d\n", a);
	return 0;
}

(3)sizeof 用法

int main()
{
	//sizeof是一个操作符
	int a = 10;
	char arr[10] = { 0 };
	printf("%d\n", sizeof(a));   //计算a所占空间的大小,单位为字节
	printf("%d\n", sizeof(int)); //也可以放类型

	short s = 5;   //char占一个字节;short占一个字节;int占四个字节
	int b = 10;
	printf("\n%d\n", sizeof(s = b + 2));   //2(sizeof括号中的表达式不参与运算的)
	printf("%d\n", s);  //5

	return 0;
}

(4)按位取反 - ~

int main()
{
	int a = -1;   //10000000 0000000 00000000 00000001 - 原码
                  //11111111 1111111 11111111 11111110 - 反码
	              //11111111 1111111 11111111 11111111 - 补码 
	int b = ~ a;   //00000000 0000000 00000000 00000000 - 二进制按位取反
	printf("%d\n", b);

	return 0;
}

(5)++和--,分为前置和后置

int main()
{ 
	//后置:先使用,再加减;
	//前置:先加减,在使用。

	//int a = 10;
	//int b = a++;  //后置++:先使用再加(先赋值给b,再加加)
	//printf("%d\n", a);   //11
	//printf("%d\n", b);   //10

	int a = 10;
	int b = ++a;  //前置++:先加再使用
	printf("%d\n", a);   //11
	printf("%d\n", b);   //11

	return 0;
}

(6)取地址 - &

int main()
{
	int a = 10;
	printf("%p\n",&a);  //取地址
	int * pa = &a;   //pa是用来存放地址的- pa是一个指针变量

	*pa = 20;  //* - 间接访问操作
	printf("%d\n", a);

	return 0;
}

(7)强制类型转换 - ()

int main()
{
	int a = (int)3.14;   //强制类型转换
	printf("%d\n", a);

	return 0;
}

6.关系操作符

>、>=、<、<=、!=(用于表示不相等)、==(用于表示相等)

7.逻辑操作符

  • &&(逻辑与): 只有两个操作数都是真,结果才是真;
  • ||(逻辑或): 只有有一个操作数为真,结果就为真;
int main()
{
	int a = 3;
	int b = 0;
	if (a && b)
	{
		printf("hehe\n");
	}
	else
		printf("haha\n");
	return 0;
}
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;  //1 2 3 4
	i = a++ || ++b || d++;    //1 3 3 4
	printf("a= %d\nb= %d\nc= %d\nd= %d\n", a, b, c, d);
	return 0;
}

 8.条件操作符(三目操作符)

具体结构:exp1?exp2:exp3 - 1为真,执行2;否者执行3.

int main()
{
	int a = 3;
	int b = 0;

	//if (a > 5)
	//	b = 1;
	//else
	//	b = -1;

	//三目操作符
	b = (a > 5 ? 1 : -1);
	printf("%d\n", b);
	return 0;
}

9.逗号操作符

逗号隔开的一串表达式

int main()
{
	int a = 3;
	int b = 5;
	int c = 0;

	//逗号表达式 - 从左向右依次计算,但是整个表达式的结果是最后一个表达式的结果
	int d = (c = 5, a = c + 3, b = a - 4, c += 5);
	printf("%d\n", d);

	return 0;
}

10.其他操作符

(1)下标引用操作符 - []

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	printf("%d\n", arr[5]);     //[] - 下标引用操作符
	return 0;
}

2)函数调用操作符 - () - 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数

int add(int x, int y)  //函数的定义
{
	return x + y;
}
int main()
{
	int a = 10;
	int b = 20;

	int ret = add(a, b);   //() - 函数调用操作符

	return 0;
}

(3)结构成员访问操作符 - . 和 ->。

struct Book   //创建了一个自定义结构体
{
	char name[10];
	char id[20];
	int price;
};
int main()
{ 
	
	struct Book b = { "C语言", "C374587299", 55 };
	struct Book * pb = &b;

	//结构体指针->成员名
	printf("书名:%s\n", pb->name);
	printf("书号:%s\n", pb->id);
	printf("价格:%d\n", pb->price);

    //结构体变量名.成员名
	//printf("书名:%s\n", b.name);
	//printf("书号:%s\n", b.id);
	//printf("价格:%d\n", b.price);

	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值