C语言 操作符详解
笔记来源于b站
发布博文只是为了记录学习…无盗窃他人视频之意…
1.算术操作符:
1.1 " \ "除数:
" \ " 法中 除数和被除数 至少要有一个 小数…输出才是小数…
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
double a = 5/2.0;//除数和被除数至少有一个小数...
double b = 5/2;
printf("%f\n %f",a,b);
return 0;
}
1.2 " % " 取模:
取模 两边都要是整数…
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int c = 5%2;
printf("%d\n",a,b,c);
return 0;
}
总结:
1." \ " 法中 除数和被除数 至少要有一个 小数…输出才是小数…
2.取模 两边都要是整数…
2.移位操作符:
2.1 右移操作符:
1. 算术右移:
右边丢弃,左边补原符号位…
为啥输出的是"-1"…涉及到源码、反码、补码:
(内存里面存的都是负数的补码形式…)
正数的源码 反码 补码 都是 自己本身…
负数的源码 除了符号位 全部取反 变反码 反码+1 变补码…
int a = -1;
a >> 1;
printf("%d\n",a);//输出-1
2. 逻辑右移:
右边丢弃,左边补0…
2.2 左移操作符:
左移:
左边舍弃,右边补“0”…
总结:
1.右移:
1.1 算术右移:
右边丢弃,左边补原符号位…
1.2 逻辑右移:
右边丢弃,左边补0…
2.左移:
左边舍弃,右边补“0”…
3.位操作符:
3.1面试题(不使用第三变量 交换两个数值):
3.1.1 加减赋值:
有缺陷…可能会溢出…
3.1.2 异或的方式:
int a = 3;
int b =5;
a= a^b;
b=a^b;
a=a^b;
printf("%d\n%d\n",a,b);
3.2 面试题(内存中存储的二进制中 “1” 的个数):
3.2.1 取模 “%” 操作:
int num =9;
int count=0;
while(num)
{
if(num%2 ==1 )
count++;
num = num/2;
}
printf("%d\n",count);
3.2.2 移位按位“&” 操作:
int num =9;
int count=0;
int i;
for(i=0;i<32;i++)
{ if((num>>i)&1==1)
count++;
}
//while(num)
//{
// if(num%2 ==1 )
//count++;
// num = num/2;
//}
printf("%d\n",count);
4.赋值操作符:
4.1 “ = ”:
4.2 复合赋值:
4.3 单目操作符:
int arr[10]={0};
printf("%d\n",sizeof(arr));//一个int 4个字节...则输出40