目录
算数操作符:+、-、*、/、%
注意:%的两个数都为整数,返回的是整除之后的余数
/的两个数都为整数型,则返回的为整数型,当有一个为浮点型,则返回的为浮点型
移位操作符:>>、<<(不要移动负数位)
<<(左移操作符):把二进制位向左移动一位。左边丢弃,右边补零
>>(右移操作符):把二进制位向右移动一位。
1、算术右移:右边丢弃,左边补原符号(0为正1为负)
2、逻辑右移:右边丢弃,左边补0
思考下代码:
int main()
{
int a = -1;
int b = a >> 1;
printf("%d",b);
getchar();
getchar();
return 0;
}
整数的二进制形式存在:原码,反码(符号位不变,其余按位取反),补码(反码+1)
对于正整数来说这三个相同
负数在内存中存放的是二进制的补码
执行代码我们可以发现打印出来b的值为-1,所以上面执行的右移操作符是算数右移
(二进制)位操作符:与&、或|、非^(异或-->相同为0,相异为1)
笔试例题:交换两个int变量的值,不能使用第三个变量。
如下:
int main()
{
int a = 5;
int b = 3;
a = a + b;
b = a - b;//原来的a
a = a - b;//原来的b
printf("a=%d,b=%d", a, b);
getchar();
getchar();
return 0;
}
但是上面代码存在:数值太大会溢出的问题。a^a=0,0^a=a
因此我们可以用异或解决,如下:a = a^b;
b = a^b;
a = a^b;
代码练习:打印出一个二进制位中含1的个数
思路:与1进行与,如果结果是1,则该数字二进制的最后一位是1,反之是0。二进制右移,以此判断。
代码如下:
int a = 0;
scanf("%d", &a);
int count=0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (((a >> i) & 1) == 1)
count++;
}
printf("%d", count);
赋值操作符:+=、-=、>>=、<<=、%=、.....
单目操作符(只有一个操作符):!、+、-(负)、sizeof、~(所有二进制按位取反)……
注意:对于sizeof sizeof(int)不能去掉(),但是sizeof(a)可以写成sizeof a,这证明了sizeof是一个操作符。
sizeof-计算所占内存大小(包含\0),而strlen是一个求字符串长度的函数,找\0之前的字符个数
int * pa=&a;--->*代表了pa是一个指针变量,
*pa=20;*是一个间接访问操作符(*pa就是a)指针变量是专门用来存地址的
()--> 强制转换符 eg:int a=(int)3.14;
关系操作符:>=、!=、==、<……
注意:比较两个字符串相等不能用==要用strcmp(引入#include<string.h>)
逻辑操作符:&&逻辑与、||逻辑或(判断真假)
笔试例题:判断下面代码:
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++&&++b&&d++;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
答案是:1 2 3 4
那么为什么呢?因为a++是0时 i就已经是0了,所以后面的++b,d++就不算了。
那假如把&&换成||呢?答案是:1 3 3 4同样,在++b时 i就已经时1了,后面就不用执行了。
条件操作符(三目操作符): 表达式1?表达式2 :表达式3 ;
表达式1为真,进行表达式2.反之,进行表达式3。
逗号操作符(逗号表达式):表达式1,表达式2,表达式3……
从左到右计算,整个表达式的结果为最后一个表达式的结果。
下标引用、函数调用和成员结构操作符:
arr[4]-->[]为操作符,arr、4为操作数,缺一不可。
无参函数的调用test()-->()为操作符,test为操作数,若为有参函数,则参数也为操作数。
结构成员访问的操作符:. ->
结构体:用struct 定义新的结构体类型
第一种结构体.成员 如下:

第二种结构体指针->成员是将结构体变量的地址放在一个指针中,操作如下:

整型提升:按照数据类型的符号位进行提升
什么时候提升?---达不到int的大小(short(2)、char(1))
eg:char a=-1;//(char 8个比特位)11111111
提升后为:11111111111111111111111111111111
unsigned char a=1;//00000001
提升后为:00000000000000000000000000000001
例题如下(截图转自比特鹏哥):

本节结束……^-^
1580

被折叠的 条评论
为什么被折叠?



