c语言操作符总结

操作符


分类:
算数操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号操作符
下标引用、函数调用和结构成员

#

算数操作符

   + 加、- 减、* 乘、/ 除、% 模运算或求余

除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。
对于/操作符,如果两个操作符都是整数,执行整数除法。而只要有浮点数就执行浮点数除法。
%左右两边必须是两个整型操作数,返回值是余数而不是商。

#include<stdio.h>
int main()
{
   float sum=1/3;
   printf("%lf",sum);
   return 0;
   }

结果为3

移位操作符

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

1.左移位操作
移位规律:左边丢弃,右边补0
2.右移位操作
移位规律:
逻辑移位:左边补0,右边丢弃
算数移位:左边移入的位取决于符号位(符号位为1,用1填充;符号位 为0,用0填充)

标准说明:
无符号值执行所有移位操作默认就是逻辑移位;但对于有符号数,到底采用逻辑移位还是算术移位就取决于编译器。
左移一位有乘2的效果,右移一位有除2的效果(左移右移的效率要比乘除高)。
对于移位操作符,不要移动负数位,这个是标准未定义的。

//写一个函数返回参数二进制中1的个数

方法一
#include<stdio.h>
int count_one_bits(unsigned int value)
{
    int count=0;
    while(value)
    {
        if(value%2!=0)
        count++;
        value=value / 2;
    }
    return  count;
}
int main()
{
    unsigned int value;
    printf("请输入一个数:");
    while ((scanf("%d", &value)) != EOF)
      printf("%d\n",count_one_bits(value));
    system("pause");
    return 0;
}
方法二
#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("%d",count);
return 0;
}

位操作符

&按位与 |按位或 ^按位异或


1.A&B :同零为零,同一为一,相异为零
2.A|B :同零为零,同一为一,相异为一
3.A^B :相同为零,相异为一
说明:他们的操作符必须为整数。
//交换两个数的值

#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", a, b);
    system("pause");
    return 0;
}

赋值运算符

  = 

赋值是表达式,表达式就具有一个值;其值就是赋值表达式左值的新值。
结合性(求值顺序):从右到左。
赋值操作符可以连续使用:a=x=y+1;

符合赋值符

+=、-=、*=、/=、%=、<<=、>>=、&= 、^= 、|=


这些操作符都可以写成符合的效果。
如:
int n=n+1;
int i>>=1;
等效于
int n+=1;
int i=i>>1;

单目操作符 ##

! 逻辑取反操作,这个操作符产生一个整型结果0或1

~ 对整型类型操作数进行求补操作

++ 前置

– 后置

  • 产生操作数的正值

  • 产生操作数的负值

& 取地址

~ 对一个数的二进制按位取反

  • 间接访问(解引用操作符)

(类型) 强制类型转换

sizeof 判断它操作数的类型长度(以字节为单位)


  1. ++:

        后置++:先使用,后++
        前置++:先++,后使用
        后置--:先使用,后--
        前置--:先--,后使用
    
  2. &:
    int arr[10]={0};
    printf(“%p”,&arr);//数组的地址
    printf(“%p”,&arr+1);//跳过整个数组的下一个地址
    printf(“%p”,arr);//数组首地址
    printf(“%p”,arr+1);//数组的第二个元素地址

  3. sizeof:
    int a=10;
    printf(“%d”,sizeof(a));//4
    printf(“%d”,sizeof a);//4
    printf(“%d”,sizeof(int));//4
    sizeof(数组名)——数组名表示整个数组——–计算整个数组的大小—单位是字节
    sizeof(&a)//4//地址占四个字节

#include<stdio.h>
int main()
{
int a=10;
int  b=20;
printf("%d",sizeof(b=a+5));//sizeof中表达式不参与运算
printf("%d%d",a,b);
return  0;
}
//4 10  20

关系操作符 ##

>

=
<
<=
!=

==//要注意与赋值操作符区分

逻辑操作符

&& 逻辑与
|| 逻辑或
int i=0,a=0,b=2,c=3,d=4,j=0;
i=a++&&++b&&d++//只要与到0,就不再往下计算
j=a++||++b||d++//只要或到真,就不再往下计算
//&&:a=1,b=2,c=3,d=4
//||: a=1,b=3,c=3,d=4

条件操作符

exp1?exp2:exp3//若exp1为真,值为exp2,反之exp3

逗号表达式

 逗号操作符用于将两个或着多个表达式分隔开,这些表达式至左向右逐个进行求值,整个逗号表达式的值是

最后那个表达式的值。
int a=1,b=2;
int c=(a>b,a=b+10,a,b=a+1)//c=13

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

  1. []
    操作数:一个数组名+一个索引值
    双目操作符
  2. ()函数调用操作符
    接受一个或者多个操作数:第一个操作数是函数名,剩余操作数是传递给函数的参数,
    printf(”%p”,APP);//取出的是函数地址和&APP没有区别

  3. 访问结构成员操作符
    . 结构体.成员名
    -> 结构体指针->成员名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值