8-初识操作符

操作符

算术操作符

+ 加

- 减

* 乘

/ 除(如果两端都是整数,则进行的就是整数除法,不会产生小数位;除号的两端有一个是小数,则会产生小数位)

% 取模(也就是取余)

移位操作符

(10进制左移一位变10倍,二进制左移一位变2倍)

>>右移操作符

<<左移操作符,移动的是二进制位

 

 位操作符

& 按位与

| 按位或

^ 按位异或

赋值操作符

a += 5

a = a  + 5

单目操作符

单目操作符:只有一个操作数的操作符

双目操作符:有两个操作数的操作符

三目操作符:有三个操作数的操作符

逻辑反操作

!代表值的取反,对于整型变量,只要非0,使用!取反都为0,0取反就是1

注:使用!时,不管被使用的值为多少,结果只有0和1其中一个数字。

负值与正值

sizeof操作符

sizeof后面的括号可以省略掉(所以sizeof是一个操作符而不是一个函数(求类型大小则需要括号))

波浪号~

把所有二进制位中的数字,1变成0,0变成1

原码、反码、补码

注:在内存中存储的是补码

注:对于正整数,源码、反码、补码都相同

负数为假,正数位真,所以最高位为1,所以-1的源码是:10000000000000000000000000000001(这是-1的源码,-1是int性,4字节,32位)

反码:在源码的基础上,符号位不变,其它位置全部与原码相反,所以-1的反码是

1111111111111111111111111111110

补码:在反码基础上再+1

1111111111111111111111111111111

======================================================

对于正整数,原码、反码、补码都相同

波浪号出来的结果是补码,当求出补码的时候,再以%d输出

00000001

11111110

===================波浪号的流程=========================

拿in a=10来说,a的二进制是00000000 00000000 00000000 00001010(10是正数)

按位取反了话应该是     11111111 11111111 11111111 11110101

再根据按位取反出来的补码,求出原码

上面的补码的反码是11111111 11111111 11111111 11110100

原码则是        10000000 00000000 00000000 00001011也就是十进制的11.

可以验证一下

#include <stdio.h>
int main()
{
	int a = 10;
	printf("%d\n", ~a);
	return 0;
}

++(前置++/后置++)

前置++

前置++,先++后使用

#include <stdio.h>
int main()
{
	int a = 10;
	int b = ++a;
	printf("%d\n",b);
	printf("%d\n",a);
	return 0;
}

后置++

后置++,先赋值后++

#include <stdio.h>
int main()
{
	int a = 10;
	int b = a++;
	printf("%d\n",b);
	printf("%d\n",a);
	return 0;
}

--(前置--/后置--)

前置--

与上相同,--a就是先减再赋值

#include <stdio.h>
int main()
{
	int a = 10;
	int b = --a;
	printf("%d\n",b);
	printf("%d\n",a);
	return 0;
}

后置--

#include <stdio.h>
int main()
{
	int a = 10;
	int b = a--;
	printf("%d\n",b);
	printf("%d\n",a);
	return 0;
}

练习

#include <stdio.h>
int main()
{
	int a = 1;
	int b = (++a)+(++a)+(++a);
	printf("%d\n",b);
	printf("%d\n",a);
	return 0;
}

答案是12,因为a=1,3个(++a)=4。因为(++a)的优先级大于加号,所以此时a+4,b=4+4+4=12

 

 强制类型转换()

我们可以用()把变量进行强制类型转换。

以下图为例

#include <stdio.h>
int main()
{
	int a = (int)3.14;
	/*int b = (a++)+(a++)+(a++);
	printf("%d\n",b);*/
	printf("%d\n",a);
	return 0;
}

关系操作符

> 大于

< 小于

>= 大于等于

<= 小于等于

!= 不等于

== 等于

 

逻辑操作符

&& 逻辑与

(有一个为假则为0,要都为真才是1)

|| 逻辑或

其中一个为真则为真

条件操作符(亦称三目操作符)

表达式1:

操作数1?操作数2 :操作数3

操作数1如果成立,则执行操作数2,否则则执行操作数3

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 3;
	int max = 0;
	printf("%d\n", max = (a > b ? a : b));
	return 0;
}

逗号表达式

用逗号隔开的一串表达式,从左到右依次计算,整个表达式的结果是最后一个表达式的结果

所以结果是3

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

下标引用

函数调用

posted @ 2022-09-03 00:00  裆朝大学士  阅读(17)  评论(0)    收藏  举报