c的操作符

最近自己看了一些c的操作符,便按照自己的想法总结如下:

操作符的分类

1.算数操作符

 + 加     - 减     * 乘     / 除     % 取模

(1)%操作符只能对两个整数进行操作,返回值是整除后的余数
(2)除%操作符外,其余四个操作符均可以作用于整数和浮点数
(3)/操作符,如果两个操作数均为整数,则执行整数除法。操作数中只要有一个为浮点数,就执行浮点数除法

2.移位操作符

左移操作符 <<

 *左边抛弃,右边补0
 *操作数有乘2的n次方的效果

右移操作符 >>

(1)逻辑移位
 *左边补0,右边丢弃
(2)算数移位
 *左边补原值的符号位,右边丢弃
 *对操作数有除2的n次方的效果

注:

 *经过左移或右移操作之后,原数的值不发生改变,表达式的值发生改变
 *对于移位操作符,不能移动负数位

3.位操作符

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

 应用:
 例题:不创建临时变量,实现两数的交换
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
   int a = 10;
   int b = 20;
   printf("a = %d, b = %d\n", a, b);   //打印初始的两数
   a = a ^ b;
   b = a ^ b;
   a = a ^ b;
   printf("a = %d, b = %d\n", a, b);   //打印交换后的两数
   system("pause");
   return 0;
}
输出结果为:a = 10, b = 20
           a = 20, b = 10

注:

 *位操作符均是对操作数的二进制位进行操作
 *位操作符的操作数必须为整数

4.赋值操作符

= 赋值

 *使用 = 操作符可以进行连续赋值,但是一般不建议进行连续赋值操作,因为对于同样的语义:
//a = x = y + 1;

//x = y + 1;
//a = x;
 明显后者更加清晰易读,易于调试

复合赋值符

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

5.单目操作符

 !                          逻辑反操作
 -                          负值
 +                          正值
 &                          取地址
 sizeof()                   操作数的类型长度(以字节为单位)
 ~                          对一个数的二进制按位取反
 --                         前置、后置--
 ++                         前置、后置++
 *                          间接访问操作符(解引用操作符)
 (类型)                    强制类型转换
 (1)对于数组arr[],&arr为整个数组的地址,
                    arr为数组首元素的地址
 (2)对于++和--这两个操作符,前置时:先对操作数进行操作,然后再使用操作数,
                           后置是:先使用操作数,再对操作数进行操作
 (3)对强制类型转换的使用,例:
#include <stdio.h>
int main()
{
    int a = (int) 3.14;
    printf("%d\n", a);
    return 0;
}
 强制转换之后,将3赋给了a。

6.关系操作符

 >
 >=
 <
 <=
 !=
 ==

注:

 *注意在编程过程中,不要将==和=写错,导致错误。

7.逻辑操作符

&&                   逻辑与
||                   逻辑或

注:

 *两者的特点:
    在逻辑与过程中,遇假停;
    在逻辑或过程中,遇真停。

8.条件操作符

exp1 ? exp2 : exp3
例:使用条件表达式求两数中的最大数:
a > b ? a : b

9.逗号表达式

exp1,exp2,exp3, ...expN
例:以下代码:
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);
求得c值为:13。

注:

逗号表达式在执行过程中,从左到右依次执行,整个表达式的结果是最后一个表达式的结果。

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

下标引用 [ ]

操作数:一个数组名 + 一个索引值
int arr[10] = 0;  //创建数组
arr[2] = 10;      //使用下表引用操作符
//[]的两个操作数为:arr 和 2。

函数调用 ( )

可接受一个或者多个操作数:第一个操作数为函数名,剩余的操作数为传递给函数的参数。
#include <stdio.h>

void test1()
{
    printf("haha\n");
}
void test2(const char* str)
{
    printf("%s\n", str);
}

int main()
{
    test1();         //使用()作为函数调用操作符
    test2("hello");  //使用()作为函数调用操作符
    return 0;
}

访问一个结构的成员

两种方法:   结构体.成员名
            结构体指针->成员名
#include <stdio.h>
#include <string.h>

struct Stu
{
    int age;
    char name[20];
};

int main()
{
    struct Stu stu;
    struct Stu* pStu = &stu;

    stu.age = 10;
    printf("age:%d\n", pStu->age);

    strcpy(pStu->name, "zhangsan");
    printf("name:%s\n", stu.name);

    return 0;
}
输出结果为:age:10
           name:zhangsan

或许还有很大的不足,还望各位可以指出,本人小白,希望可以和各位相互探讨一下有关c的知识^_^。

猜你喜欢

转载自blog.csdn.net/WYaoHui/article/details/80317937