操作符总结

操作符总结

算术操作符

+ - * / %

1.%只能用于整数与整数之间
2. / 根据两边的操作数的不同,而分为整数除法和浮点数除法

移位操作符

<< 左移操作符
>> 右移操作符

左移操作符

左边抛弃,右边补0

右移操作符

通常我们的编译器会使用算术移位
左边填充符号位,右边丢弃

1.整数在内存中存储的是二进制的补码
2.正数的原反补码是相同的
3.负数 原码->补码 取反 +1
补码->原码 取反+1 或 -1取反

4.==不能移动如(-1)之类的负数,即 a>>-1

位操作符

& 按位与
| 按位或
^ 按位异或
注意:操作数只能为整数

不创建临时变量实现两个数的交换

int a=20;
int b=10;
a=a^b;
b=a^b;
a=a^b;
//完成a b的交换

编写代码实现:求一个整数存储在内存中的二进制中1的个数

方法1

除以2得1时即count++

#include<stdio.h>
int main()
{
   int num,count=0;
   scanf("%d",&num);
   while(num)
   {
      if(num%2==1)
          count++;
      num=num/2;
   }
   printf("count=%d",count);
   return 0;
}

缺点:是只可以对正数运算

方法2

运用>>操作符,逐个判断是否为1

#include<stdio.h>
int main()
{
    int i,num,count=0;
    scanf("%d",&num);
    for(i=0;i<32;i++)
    {
         if((num>>i)&1==1)
         count++;
     }
     printf("count=%d",count);
     return 0;
}

缺点:虽可以正负数进行转换,但效率低下

方法3

和小的数字按位与

#include<stdio.h>
int main()
{
     int num,count=0;
     scanf("%d",&num);
     while(num)
     {
            num=num&(num-1);
            count++;
     }
     printf("count=%d",count);
     return 0;
}

缺点:效率高,但不容易想到

注:
1.a^0=a a^a=0
2.==c=a+(b-a)/2=(a&b)+((a^b)/2)

赋值操作符

单目操作符

~ 对一个数的二进制按位取反
前置++ 先++后使用
后置++ 先使用后++

注:1.a=10 ~a=-11
因为~取反包括符号位
2.sizeof (char)=1字节
sizeof(&char)=4字节

关系操作符

!= 测试不相等
==测试相等 (不能判断字符串是否相等)

逻辑操作符

&& || 只关注真假
区别于按位与按位或的需要看二进制

&&前边的一旦为假,后面的即不再运算
|| 前边的一旦为真,后面的即不再运算

条件操作符

exp1?exp2:exp3

逗号表达式

从左往右依次执行,但整个表达式的结果是最后一个表达式的结果

下标引用、函数调用和结构成员

1.[]下标引用操作符

操作数:一个数组名+一个索引值

arr[10]={1,2,3,4,5,6,7};
int* p=arr;
p[5]==*(p+5)==arr[5]==*(arr+5)==*(5+arr)==5[arr];
2.()函数调用操作符

接受一个或多个操作数,第一个操作数是函数名,其余是传递给函数的参数

3.访问一个结构的成员

. 结构体.成员名
-> 结构体指针->成员名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值