操作符详解
/除法操作符:得到的是商,一边是小数,则结果是小数
%取模操作符:只能对整数操作
>>右移操作符:移动的是二进制位
1.算术右移:右边丢弃,前面补符号位(正数最前为0,负数前面为1)
2.逻辑右移:右边丢弃,前面0
见到的基本是算术右移
右移1位有除2的效果
例子:
int a = -1;
//整数的二进制表示有:原码、反码、补码
//存储到内存的是补码
//正整数的原码、反码、补码相同,直接写原码就ok了
//10000000000000000000000000000001 - -1的原码
//11111111111111111111111111111110 - -1的反码(除符号位按位取反)
//11111111111111111111111111111111 - -1的补码(反码加1)
int b=a >> 1;//b=-1
//1(补上符号位) 1111111111111111111111111111111 1(丢掉)
//还是补码-1
//printf();打印出来的是原码
<<左移操作符:移动二进制位,左边丢弃,右边补零
//不能移动负数位,只能作用于整数
位操作符:
&操作符:按2进制位与
int a = 3;
int b = 5;
int c = a&b;//1
//a:011
//b:101
//c:001
|操作符:按2进制位或
int a = 3;
int b = 5;
int c = a|b;//7
//a:011
//b:101
//c:111
^操作符:按2进制位异或(相同为0,相异为1)
int a = 3;
int b = 5;
int c = a^b;//6
//a:011
//b:101
//c:110
例题1:不创建临时变量,交换两个整数的值
int a = 3;
int b = 5;//加减法
a = a+b;//a等于ab之和8
b = a-b;//b=3;
a = a-b;//a=5;
缺陷:如果a和b存储较大的整形时,二进制位可能会溢出//异或法
a = a^b;//a=6 b=5
b = a^b;//a=6 b=3
a = a^b;//a=5 b=3
//a^b产生一个密码,密码和a异或可出b,密码和b异或可出a
//可读性较差
例题:求一个整数的二进制位中有几个1
int main()
{
int num = 0;
int count = 0;
scanf("%d",&num);
for(i=0;i<32;i++)
{
if (1==(num>>i)&1))
count++;
}
printf("%d",num);
}
//32bit
//num&1==1;则一定为1
//统计num补码有几个1//整数正确,负数则错误
/*int main()
{
int num = 0;
int count = 0;
scanf("%d",&num);
while(num)
{
if (num % 2 ==1)
count++;
num = num / 2;
}
printf("%d",num);
}*/
=赋值操作符:
连续赋值:a=x=y+1;//语法支持,但不推荐
复合赋值符:+= -= *= /= %= >>= <<= &= |= ^=
单目操作符:只有一个操作数(a+b的+是双目操作符)
!应用场景if(a)//如果a为真则执行
if(!a)//如果a为假则执行
-负值 +正值
&取地址操作符:int* p=&a; *p;
*解引用操作符
sizeof()计算变量所占空间的大小
初始化int arr[10]={0}
int 4
char 1
char* 4或8
arr 40
[10] 数组类型 40
[5] 20
例题:判断两个printf的值
int main()
short s = 0;
int a =10;
printf("%d\n",sizeof(s=a+5));//2 --- short为2个字节
printf("%d\n",s);//0 --- sizeof之中不改变变量
~ 按2进制位取反
int a=0;
printf("%d",~a);//-1
例题:对a的二进制位的某位进行改变
int a = 11;
a = a | (1<<2);//15
a = a & (~(1<<2));//11
++:前置++:先++,后使用
后置++:先使用,后++
--:前置--:先--,后使用
后置--:先使用,后--
(类型):强制类型转换
关系操作符:比较大小
逻辑操作符:&&逻辑与
int a = 3;
int b = 5;
int c = a&&b;//1
&&左边为假则右边的代码不执行
||逻辑或
int a = 3;
int b = 5;
int c = a||b;//1
||左边为真则右边的代码不执行
条件操作符:(exp1?exp2:exp3)
56mins