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

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

函数调用



浙公网安备 33010602011771号