C语言操作符小结

    操作符分为算术操作符、移位操作符、位操作符、赋值操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式以及下标引用、函数调用和结构成员。下面进行逐个介绍:

    1.算数操作符

    +  -   *  

     /:算术除法(只要有一个数是浮点数,结果必是浮点数)

    %:算术取余(只用来求两个整数之间的余数,不可作用于整数和浮点数)

    2.移位操作符(移动的是二进制位,不要移动负数位)

    << :左移操作符(左边抛弃,右边不零)

    >> :右移操作符

算术右移(右边丢弃,左边补符号位)

        逻辑右移(右边丢弃,左边补零)

例1: 

//#include<stdio.h>

//#include<stdlib.h>
//int main()
//{
// int n = -1;
// //10000000000000000000000000000001源码
// //11111111111111111111111111111110反码
// //11111111111111111111111111111111补码
// //左移
// //11111111111111111111111111111110左移1
// //10000000000000000000000000000001取反
// //10000000000000000000000000000010补码
// //右移
// //11111111111111111111111111111111
// //10000000000000000000000000000000
// //10000000000000000000000000000001

//例2:

// int n=10;

//     int m = n << 1;//向左一位
// printf("%d %d\n", n, m);//10 20(1010,10100)
// system("pause");
// return 0;
//}

例:3:计算二进制数中1的个数?

#include<stdio.h>
#include<stdlib.h>
int main()
{
int num;
printf("Please input a number:");
scanf("%d", &num);
int count = 0;
//方法1:
while (num)
{
if (num % 2 == 1)  //测试:对2取余是否正确
{
count++;     //正确则计数
}
num = num / 2;   //按二进制循环
}
//方法2:可计算负二进制数中1的个数
for (int i = 0; i < 32; i++)
{
if (((num >> 1) & 1) == 1)    //判断二进制数按位右移,和1相与是否正确
{
count++;
}
}
//方法3::更高效
while (num)
{
count++;//计数
num = num&(num - 1);     //判断num和num-1按二进制位与是否正确(即是否都为1),正确则继续循环
}
printf("1的个数为%d\n", count);
system("pause");
return 0;
}

    3.位操作符

    他们的操作数必须为整数:

        &(按(二进制)位与)

        |(按(二进制)位或)

        ^(按(二进制)位异或)

             {a=a^b;b=a^b;a=a^b}  //可实现a、b交换

    4.赋值操作符

        =(最好不要连续赋值,看起来比较乱)

       复合操作符:

        +=,-=,*=,/=,>>=,<<=,%=,&=,|=

    5.单目操作符

        !(逻辑反操作),~(按二进制位取反),+(正值),-(负值),

        &(取地址)&arr数组名是首元素&arr[0]的地址,&arr是数组的地址

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

         写法:sizeof(a)    sizeof a;

                   sizeof(int)    sizeof int;    //sizeof 为操作符可以不带括号

         对于数组:sizeof(arr):计算整个数组arr的大小;sizeof(arr[0])为计算首元素的大小;

         注意:sizeof内部表达式不参与运算;

        ++,--(自增,自减)

            a++,a--:表示先使用,后自增(减);

            ++a,--a:表示先自增(减),后使用;

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

           例如指针: int *p=&a;

        (类型)(强制类型转换)

            例如: (int)a:将a转换我I整型;

    6.关系操作符

        >    <    >=    <=    !=(测试不相等)    ==(测试相等)

    7.逻辑操作符

        &&(逻辑与)    ||(逻辑或)

    8.条件操作符

        例如:a > b ? c : d

    9.逗号表达式

        (ex1,ex2,……exN)(逗号隔开,逐步计算,输出值取最后一个表达式的结果)

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

        1、[ ]:一个数组名+一个索引值

                    int arr[10];arr[9]=10;

        2、():函数调用操作符(接受一个或多个操作符)

        3、访问一个结构的成员

            .结构体.成员名

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

例如:

struct Stu   //前加typedef可将类型重命名

{

char name[20];

int age;

char sex;

}//这里加重命名后的名字 ;(分号不可丢)

int main()

{

struct Stu S;   //创建S,申请内存空间

strcpy(S.name, "Lida");  //将数据拷贝到空间中

strcpy(S.sex, "female");

//指针

struct Stu* ps = &S;

(*ps).age = 20;

strcpy((*ps).name, "koko");

strcpy(ps->name, "haha");  //->指针指向name空间,将数据拷贝进去

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值