操作符和表达式
@[toc]
一、操作符:
-
算数操符:+、-、*、/、%
-
其中除了%外的操作都可以作用于整数和浮点数,
%超作符的两个操作数必须为整数
。 -
移位操作符:(不要移动的位数为负数)
-
>>为右移操作符
:(相当于除2 ^ i)
(1)逻辑位移:左边用0补充,右边丢弃
(2)算数移位:左边补符号位,右边丢弃
-
<<为左移操作符
:(相当于乘2 ^ i)
左边丢弃,右边补0; -
位操作符:
-
(1)& 按位与
-
(2 )| 按位或
-
(3) ^ 按位异或 (注:他们的操作数必须是整数。)
例:不能创建临时变量(第三个变量),实现两个数的交换。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}
编写代码实现:求一个整数存储在内存中的二进制中1的个数
//方法1
#include <stdio.h>
int main()
{
int num = 10;
int count= 0;//计数
while(num)
{
if(num%2 == 1)
count++;
num = num / 2;
}
printf("二进制中1的个数 = %d\n", count);
return 0;
}
//方法2:
#include <stdio.h>
int main()
{
int num = -1;
int i = 0;
int count = 0;//计数
for(i = 0; i < 32; i++)
{
if(((num>>i) & 1) == 1 )
count++;
}
printf("二进制中1的个数 = %d\n",count);
return 0;
}
//方法3:
#include <stdio.h>
int main()
{
int num = -1;
int i = 0;
int count = 0;//计数
while(num)
{
count++;
num = num&(num-1);
}
printf("二进制中1的个数 = %d\n",count);
return 0;
}
-
赋值操作符及复合赋值符
=、+=、-=、*=、/=、%=等
-
单目操作符
! | 逻辑取反 |
---|---|
- | 负值 |
+ | 正值 |
& | 取地址 |
-- | -- |
sizeof | 求操作数的长度 |
~ | 按位取反 |
-- | -- |
--、++ | 自减、自增 |
* | 解引用 |
-- | -- |
(类型) | 强制转换 |
其中sizeof为一个关键字,求长度时在编译期间确定大小,并不参与运算, 若
sizeof(数组)则代表整个数组的字节大
小。
- 关系操作符
>
>=
<
<=
!= 用于测试“不相等” == 用于测试“相等”
- 逻辑操作符
- && 逻辑与
- || 逻辑或
例:
1 & 2----->0
1 && 2---->1
1 | 2----->3
1 || 2---->1
例:
#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;
}
注意!!!
进行&&运算时:遇到0便停止后续运算
进行||运算时:遇到1便停止后续运算
-
条件操作符
-
表达式1 ?表达式2 : 表达式3
a>b:?a:b等价于
if(a>b)
{
return a;
}
else
{
return b;
}
二.表达式
-
逗号表达式:表达式1,表达式2,……表达式N
-
多个表达式用逗号隔开,从左往右依次计算,整个表达式的结果由最后一个表达式的结果
决定 -
下标引用、函数调用、结构成员
-
(1)[] : 下标应用操作符[](注意在指针中该操作符自带解引用功能)
-
(2) () :函数调用操作符
-
(3). : 结构体变量.成员 名。
-
(4) ->: 结构体指针->成员名
-
表达式求值
-
由操作符优先级和结合性决定
,其中,C中终始一缺省整形类型的精度来进行的,为了获得这个精度,表达式中字符和短整型操作数在使用前都被转化为普通整形,即整形提升(正数高位补0负数高位补1)。
评论区