C语言-操作符详解

1、算数操作符:+ - * / %

int main()
{
    int a = 3 / 5;//0
    int a = 6 / 5;//1
    float a = 6 / 5;//1
    float a = 6.0 / 5.0;//1.2

    int a = 18 % 5;//%的俩个操作数必须是整数
}

2、移位操作符:<< >>

int main()
{
    int a = 2;//00000000000000000000000000000010
    int b = a << 1;//b = 4//00000000000000000000000000000100
    //a << 1:把a的二进制向左移动一位

    int a = 10;//00000000000000000000000000001010
    int b = a >> 1;//b = 5//00000000000000000000000000000101
    //a >> 1:把a的二进制向右移动一位
}

3、位操作符:&按位与 |按位或 ^按位异或(位==二进制位)(操作数必须为整数)

int main()
{
    int a = 3;
    int b = 5;

    int c = a & b;//1//与:有0为0
    //a:00000000000000000000000000000011
    //b:00000000000000000000000000000101
    //c:00000000000000000000000000000001

    int c = a | b;//7//或:有1为1
    //a:00000000000000000000000000000011
    //b:00000000000000000000000000000101
    //c:00000000000000000000000000000111

    int c = a ^ b;//6//异或:相同为0,相异为1
    //a:00000000000000000000000000000011
    //b:00000000000000000000000000000101
    //c:00000000000000000000000000000110
}

练习:交换俩个变量,不使用第三个变量

int main()
{
    int a = 3;
    int b = 5;

    printf("a=%d b=%d", &a, &b);
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("a=%d b=%d", &a, &b);

    return 0;
}

练习:求一个整数存储在内存中的二进制中1的个数

int main()
{
    int a = 13;
    int b = a | (1 << 4);
    //00000000000000000000000000001101  a
    //00000000000000000000000000010000  (1 << 4)
    //00000000000000000000000000011101  b
    printf("%d\n", b);

    int c = b & ~(1 << 4);
    //00000000000000000000000000011101  b
    //00000000000000000000000000010000  (1 << 4)
    //11111111111111111111111111101111  ~(1 << 4)
    //00000000000000000000000000001101  c
    printf("%d\n", c);

    return 0;
}

4、赋值操作符:= += -= /= &= >>= <<= %= |= ^=

int main()
{
    int a = 10;
    a = 100;

    a += 100;//a = a + 100;
    a <<= 3;//a = a << 3;
}

5、单目操作符(只有一个操作数):! - + & sizeof ~ -- ++ * (类型)

(1)、!:逻辑反操作符

int main()
{
    int a = 5;
    //a为真,打印1
    if (a)
    {
        printf("1\n");
    }
    //a为假,打印0
    if (!a)
    {
        printf("0\n");
    }
    return 0;
}

(2)、+/-:正值/负值

(3)、sizeof:求操作数的类型长度(单位是字节)

int main()
{
    int a = 10;
    char arr[10] = { 0 };
    printf("%d\n", sizeof(a));//4 //计算a所占空间的大小,单位是字节
    printf("%d\n", sizeof(int));//4
    printf("%d\n", sizeof(arr));//10
    printf("%d\n", sizeof(char));//1
    return 0;
}
int main()
{
    short a = 5;
    int b = 10;
    printf("%d\n", sizeof(a = b + 2));//2 //sizeof括号中的表达式不参与运算
    printf("%d\n", a);//5
}

(4)、~:按位取反(对补码按位取反)(求原码补码的反码)

int main()
{
    int a = -1;
    //10000000000000000000000000000001  原码
    //11111111111111111111111111111110  反码
    //11111111111111111111111111111111  补码
    int b = ~a;
    //00000000000000000000000000000000  原码补码的反码

}

(5)、++/--:

int main()
{
    int a = 10;
    int b = a++;//后置++,先使用,后++
    printf("%d\n", a);//11
    printf("%d\n", b);//10

    int a = 10;
    int b = ++a;//前置++,先++,后使用
    printf("%d\n", a);//11
    printf("%d\n", b);//11

}

(6)、&和*

&:取地址

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

int main()
{
    int a = 10;
    printf("%p\n", &a);
    int* pa = &a;//pa用来存放地址:pa是一个指针变量
    *pa = 20;//解引用操作符(间接访问操作符)
    printf("%d\n", a);//20
    return 0;
}

(7)、//(类型):强制类型转换

int main()
{
    int a = (int)3.14;//强制类型转换,不报错
    return 0;
}

(8)、关系操作符:< <= > >= != ==

(9)、逻辑操作符:或|| 且&&

int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    i = a++ && ++b && d++;
    printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//1,2,3,4
    //int c = a && b;//当a=0时,确定为假,后面不进行计算

    i = a++ || ++b || d++;
    printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);//2,2,3,4
    //int c = a || b;//当a!=0时,确定为真,后面不进行计算

    return 0;
}

(10)、条件操作符(三目操作符):(表达式1)?(表达式2):(表达式3)

int main()
{
    int a = 3;
    int b = 0;

    //if表达形式
    if (a > 5)
        b = 1;
    else
        b = -1;

    //条件操作符表达
    b = (a > 5 ? 1 : -1);//max = (a>b ? a : b)

    return 0;
}

(11)、逗号表达式

int main()
{
    int a = 3;
    int b = 5;
    int c = 0;
    //逗号表达式:从左向右以依此计算,但整个表达式的结果是最后一个表达式的结果
    int d = (c = 5, a = c + 3, b = a - 4, c += 5);
    printf("%d\n", d);//10
    return 0;
}

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

下标引用:[]

int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    //              0,1,2,3,4,5,6,7,8,9     下标
    printf("%d\n", arr[4]);//5  //打印下标为4的数值
    return 0;
}

函数调用:()

int Add(int x, int y)
{
    return x + y;
}
int main()
{
    int a = 10;
    int b = 20;
    int ret = Add(a, b);//函数调用操作符:()

    return 0;
}

结构成员:. ->

struct Book//创建一个自定义类型  //定义类型:书
{
    char name[20];
    char id[20];
    int price;
};
int main()
{
    int num = 10;
    struct Book b = { "C语言","123456",55 };
    struct Book* pb = &b;

    printf("书名:%s\n", (*pb).name);
    printf("序号:%s\n", (*pb).id);
    printf("定价:%s\d", (*pb).price);

    printf("书名:%s\n", pb->name);
    printf("序号:%s\n", pb->id);
    printf("定价:%s\d", pb->price);
    //结构体指针->变量名

    printf("书名:%s\n", b.name);
    printf("序号:%s\n", b.id);
    printf("定价:%s\d", b.price);
    //结构体名.变量名

    return 0;
}

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值