C语言初阶七:C语言操作符详解(1)

#1024程序员节|征文#

这篇文章是对之前文章中操作符的补充,可以看之前的文章:C语言初阶:六.算数操作_如何用编程表示除法-CSDN博客

  C语言操作符是用于执行各种运算和操作的符号。包括算术操作符(如+、-、*、/、%),用于基本数学运算;关系操作符(如==、!=、>、<、>=、<=),用于比较两个值;逻辑操作符(如&&、||、!),用于布尔逻辑运算;位操作符(如&、|、^、~、<<、>>),用于直接操作二进制位;还有赋值操作符(如=、+=、-=等),用于给变量赋值。这些操作符是C语言编程的基础。

1. 操作符分类

算术操作符        移位操作符

位操作符         赋值操作符

单目操作符         关系操作符

逻辑操作符         条件操作符

逗号表达式         下标引用、函数调用和结构成员

2. 算术操作符

+    -   *   /   %

1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。 3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

扫描二维码关注公众号,回复: 17439420 查看本文章

3. 移位操作符

左移操作符 <<

右移操作符 >> 

 注:移位操作符的操作数只能是整数。

//2进制
//整数的2进制表示方式有三种
//        原码,补码,反码
//在内存中,存储的是补码的二进制
//所以在参与移位的时候,移动后都是补码

3.1 左移操作符

移位规则: 左边抛弃、右边补0'

int main()
{
	int a = 10;
	int b = a << 1;
	//00000000000000000000000000001010 - a的补码进行左移

	printf("%d\n", a);
	printf("%d\n", b);

	return 0;
}

3.2 右移操作符

移位规则( 首先右移运算分两种):

1. 逻辑移位 左边用0填充,右边丢弃

2. 算术移位 左边用原该值的符号位填充,右边丢弃

int main()
{
	int a = -1;
	//100000000000000000000000000000001  --原码
	//111111111111111111111111111111110  --反码
	//111111111111111111111111111111111  --补码
	//


	int b = a >> 1;


	printf("a=%d\n", a);
	printf("b=%d\n", b);//算数右移


	return 0;
}

警告⚠ : 对于移位运算符,不要移动负数位,这个是标准未定义的。

例如:

int num = 10;

num>>-1;//error

4. 位操作符

位操作符有:

&  //按位与

|   //按位或

^  //按位异或

注:他们的操作数必须是整数

int main()
{
	int a = 3;
	//00000000000000000000000000000011

	int b = -5;
	//10000000000000000000000000000101
	//11111111111111111111111111111010
	//11111111111111111111111111111011  --补码
	int c = a & b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//00000000000000000000000000000011---> 3,打印3
	//按位与规则:有0则为0,全为1,则为1


	printf("c=%d\n", c);//c=3
	return 0;
}
  |   按位或
按位或规则:有1则为1,全为0,则为0

int main()
{
	int a = 3;
	//00000000000000000000000000000011

	int b = -5;
	//10000000000000000000000000000101
	//11111111111111111111111111111010
	//11111111111111111111111111111011  --补码
	int c = a | b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//11111111111111111111111111111011----> -5
	//按位或规则:有1则为1,全为0,则为0


	printf("c=%d\n", c);//c=-5
	return 0;
}
  ^  按位异或   1.可读性差,2.效率不如使用临时变量的方法  3.异或只能交换整数(局限)
	按位或规则:相同为0,相异为1
a^a=0
0^a=a
异或支持交换律
 
int main()
{
	int a = 3;
	//00000000000000000000000000000011

	int b = -5;
	//10000000000000000000000000000101
	//11111111111111111111111111111010
	//11111111111111111111111111111011  --补码
	int c = a ^ b;
	//00000000000000000000000000000011
	//11111111111111111111111111111011
	//11111111111111111111111111111000--->c的补码
	// 1000000000000000000000000000111
	// 1000000000000000000000000001000--->原码  c=-8
	//按位或规则:相同为0,相异为1


	printf("c=%d\n", c);//c=-8
	return 0;
}

5. 赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

int weight = 120;//体重

weight = 89;//不满意就赋值

double salary = 10000.0;

salary = 20000.0;//使用赋值操作符赋值

赋值操作符可以连续使用,比如:

int a = 10;

int x = 0;

int y = 20;

a = x = y+1;//连续赋值 这样的代码感觉怎么样?

那同样的语义,你看看:

x = y+1;

a = x; 这样的写法是不是更加清晰爽朗而且易于调试

复合赋值符 +=    -=    *=   /=   %=   >>=

这些运算符都可以写成复合的效果。 比如:

int x = 10;

x = x+10;

x += 10;//复合赋值

//其他运算符一样的道理。这样写更加简洁

6. 单目操作符

6.1 单目操作符介绍

!           逻辑反操作

-           负值

+           正值

&           取地址

sizeof      操作数的类型长度(以字节为单位)

~           对一个数的二进制按位取反 --          

前置、后置-- ++        

前置、后置++ *          

*      间接访问操作符(解引用操作符)

(类型)       强制类型转换

演示代码:

#include <stdio.h>
int main()
{
 int a = -10;
 int *p = NULL;
 printf("%d\n", !2);
 printf("%d\n", !0);
 a = -a;
 p = &a;
 printf("%d\n", sizeof(a));
 printf("%d\n", sizeof(int));
 printf("%d\n", sizeof a);//这样写行不行?
 printf("%d\n", sizeof int);//这样写行不行?
 return 0;
}

6.2 sizeof 和 数组

关于sizeof其实我们之前已经见过了,可以求变量(类型)所占空间的大小。

#include <stdio.h>
void test1(int arr[])
{
 printf("%d\n", sizeof(arr));//(2)
}
void test2(char ch[])
{
 printf("%d\n", sizeof(ch));//(4)
}
int main()
{
 int arr[10] = {0};
 char ch[10] = {0};
 printf("%d\n", sizeof(arr));//(1)
 printf("%d\n", sizeof(ch));//(3)
 test1(arr);
 test2(ch);
 return 0;
}

7. 关系操作符

>

>=

<  

<=

!=       用于测试“不相等”

==      用于测试“相等”

这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。

警告: 在编程的过程中== 和=不小心写错,导致的错误。

猜你喜欢

转载自blog.csdn.net/2303_80170533/article/details/143192784