算数操作符注意点
%:不能使用double类型定义,即两个操作数都必须为整数。
移位操作符注意点
>>(右移操作符)分为算术右移与逻辑右移,移动的是二进制位。
(常用)算术右移:右移一位相当于除2,左边补原符号位。(右边丢弃,左边补符号位)
逻辑右移:右移一位相当于除2,左边补0。(右边丢弃,左边补0)
<<(左移操作符)不分算数右移和逻辑左移;左移一位,相当于乘2。(左边丢弃,右边补0)
提示:移位运算符不能移动负数位,标准未定义。
整数存储到内存中的是二进制补码,整数存在形式有原码,反码,补码。
原码——反码:符号位不变,其余取反;
反码——补码:反码加1;
位操作符
按位与&,按位或|,按位异或^,操作符必须是整数。
赋值操作符可连续赋值
例如:x=a=b+1;
复合赋值符
+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=
#include<stdio.h>
int main ()
{
int a=10;
// a=a+2;
//printf("%d\n",a);
a+=2;
printf("%d\n",a);
return 0;
}
单目操作符
!、-、+、&(取地址)、sizeof操作数的类型长度(以字节为单位)、~(对一个数的二进制位按位取反)、--、++、*间接访问操作符(解引用操作符)、(类型)强制类型转换
#include<stdio.h>
int main()
{
int a=10;
int* p=&a;
*p;//解引用操作符,*p指向的是a的内容
return 0;
}
#include<stdio.h>
int main()
{
short s=0;
int a=0;
printf("%d\n",sizeof(s=a=4));//结果为2
printf("%d\n",s);//结果为0
return 0;
}
数组传参时,传的是数组的首地址
逗号表达式
exp1,exp2,exp3,……expn;从左到右依次计算,取的是最后一个表达式
隐式类型转换
整型提升
#include<stdio.h>
int main()
{
char a=3;//由于a只能存放一个字节(8bit),所以取低八位
char b=127;//相加时各自补够32位(高位通通补充符号位),再相加
char c=a+b;//只能存放低八位
printf("%d\n",c);//整型提升,补够32位(高位都补符号位),求原码,打印c
return 0;
}