基本操作符和位移操作符(& | ^ >> <<)

导读:

前面我们学习了c语言程序的选择结构

分支语句(选择结构):if、switch_流浪者与猴的博客-CSDN博客

以及循环结构

do while、while、for循环以及改变循环的状态_流浪者与猴的博客-CSDN博客 

现在我们来学习了解操作符

操作符分类:

算术操作符

赋值操作符

关系操作符

移位操作符

位操作符

逻辑操作符

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

单目操作符

条件操作符

逗号表达式

下标引用、函数调用和结构成员

上面几种有一些都是简单易懂的,下面我们来具体了解一下

算术操作符:

+            -           *           /           %

前四个“加减乘除”我们都是很熟悉的,从小学就开始打交道,最后一个" % "算的是余数," / "算的是商,比如" 4 / 2 "得到的结果是2,而" 4 % 2 "得到的结果是0

还要注意的是

1.除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。

2.对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。

3.% 操作符的两个操作数必须为整数。返回的是整除之后的余数。

 赋值操作符:

简单赋值:

int main()
{
	int weight = 120;//体重
	weight = 89;//不满意就赋值
	double salary = 10000.0;
	salary = 20000.0;//使用赋值操作符赋值。
	return 0;
}

当然还有复合赋值府

复合赋值符:

+=        -=         *=         /=         %=         >>=         <<=         &=         |=         ^= 

这些操作符可以让我们的代码更简便一些

int main()
{
	int x = 10;
	x = x + 10;
	x += 10; 
	return 0;
}

x += 10 就相当于x = x + 10;

关系操作符:

>

>=

<

<=

!=   用于测试“不相等”

==      用于测试“相等”

这些都是用于比较大小或者其它,但是要注意 “=” 与“ == ”的区别

在编程的过程中== 和=不小心写错,就会导致错误。 

上面都是些简单易懂的,下面我们来了解一些稍微难一点的,但也是基础的

单目操作符:

!           逻辑反操作

-           负值

+           正值

&           取地址

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

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

--          前置、后置--

++          前置、后置++

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

(类型)       强制类型转换

 !           逻辑反操作

可以用于条件判定,比如 if (a != 0)

移位操作符:

我们在电脑中的储存都是二进制,移位操作符就是在二进制的基础上操作的

<<         左移操作符 

>>         右移操作符    

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

左移操作符 :

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

下面我们来看代码

int main()
{
	int n = 10;
	int m = 0;
	m = n << 1;
	printf("%d\n", m);
	return 0;
}

得到结果

 

右移操作符:

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

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

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

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

 第一个用作用正数,第二个用于负数

既然我们了解了移位操作符,我们再来学习一下位操作符

位操作符: 

&         //按位与

|          //按位或

^         //按位异或

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

int main()
{
	int a = 10;
	int b = 20;
	int c = 0;
	int d = 0;
	int n = 0;
	c = a & b;
	d = a | b;
	n = a ^ b;
	printf("c = %d d = %d n = %d\n", c, d, n);
	return 0;
}

 &    按位与

两位数的补码有0取0,都有1取1

|     按位或

两位数的补码有1取1

^     按位异或 

相同为0,相异为1

输出结果:

实操:

不创建临时变量(第三个变量)实现两个数的交换

int main()
{
    int a = 3;
    int b = 5;
    a = a ^ b;//a = 3^5
    b = a ^ b;//b = 3^5^5=3    5^5 = 0,3^0=3
    a = a ^ b;//a = 3^5^3=5
    printf("a = %d  b = %d\n", a, b);
    return 0;
}

所以我们可以根据其位操作符以及移位操作符的作用,来实现不同的需求

 逻辑操作符:

&&     逻辑与

||          逻辑或

区分逻辑与和按位与

区分逻辑或和按位或 

(0 为假,1为真)

1&2----->0

1&&2---->1

1|2----->3

1||2---->1

条件操作符:

exp1 ? exp2 : exp3

这个我们可以用于比较大小中;比如

输入两个数a 和 b,输出其中最大值

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int max = 0;
	max = a > b ? a : b;//如果a>b,把a值付给max,反之把b值赋给max
	printf("%d\n", max);
	return 0;
}

我们输入 20 和 30

 

逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果 

猜你喜欢

转载自blog.csdn.net/qq_64818885/article/details/132815984