您的位置:首页 > 编程语言 > C语言/C++

C语言操作符小结

qq_40632272 2018-03-31 10:46 78 查看
    操作符分为算术操作符、移位操作符、位操作符、赋值操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式以及下标引用、函数调用和结构成员。下面进行逐个介绍:
    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空间,将数据拷贝进去
}
标签: