C语言 ─── 操作符详解
目录
1. 算术操作符
+ - * / %
2. 移位操作符
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。
2.1 左移操作符
2.2 右移操作符
int num = 10;
num>>-1;//error
3. 位操作符
& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。
#include <stdio.h>
int main()
{
int num = -1;
int i = 0;
int count = 0;//计数
for(i=0; i<32; i++)
{
if( num & (1 << i) )
count++;
}
printf("二进制中1的个数 = %d\n",count);
return 0;
}
//思考还能不能更加优化,这里必须循环32次的。
#include <stdio.h>
int main()
{
int num = -1;
int i = 0;
int count = 0;//计数
while(num)
{
count++;
//n=n&(n-1)执行一次可以把n的二进制最右面的1去掉一个
num = num&(num-1);
}
printf("二进制中1的个数 = %d\n",count);
return 0;
}
//这种方式是不是很好?达到了优化的效果,但是难以想到。
int main()
{
int n;
scanf("%d", &n);
if ((n & (n - 1)) == 0)
{
printf("Yes ");
}
else
{
printf("No ");
}
}
4. 复合赋值符
5. 单目操作符
#include <stdio.h>
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
//程序输出的结果是什么?
答案:1 2 3 4
1 3 3 5
6. 逗号表达式
exp1, exp2,exp3,exp4,...expN
7. 隐式类型转换
7.1 整型提升的意义:
//实例1
char a,b,c;
...
a = b + c;
7.2 如何进行整体提升呢?
//负数的整形提升
char c1 = -1;
变量c1的二进制位(补码)中只有8个比特位:
1111111
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为1
提升之后的结果是:
11111111111111111111111111111111
//正数的整形提升
char c2 = 1;
变量c2的二进制位(补码)中只有8个比特位:
00000001
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为0
提升之后的结果是:
00000000000000000000000000000001
//无符号整形提升,高位补0
//实例1
int main()
{
char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if(a==0xb6)
printf("a");
if(b==0xb600)
printf("b");
if(c==0xb6000000)
printf("c");
return 0;
}
//实例2
int main()
{
char c = 1;
printf("%u\n", sizeof(c));
printf("%u\n", sizeof(+c));
printf("%u\n", sizeof(-c));
return 0;
}
8. 算术转换
long double
double
float
unsigned long int
long int
unsigned int
int
float f = 3.14;
int num = f;//隐式转换,会有精度丢失
整形提升是针对小于int的值进行运算时需要整形提升,
算数转换最低也是int
★★★数组名
原文地址:https://blog.csdn.net/m0_73751295/article/details/137739325
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!