【C语言】操作符

算术操作符:+(加)、-(减)、*(乘)、/(除)、%(模)

 /(除)

两操作数都为整数,执行整数除法,只要有浮点数,执行的就是浮点数除法

%(模)取余数

eg:5 % 2 = 1        5 除以 2 的 2 余 1(结果)

注意:左操作数和右操作数必须都是整数


移位操作符:>>(右移操作符)、<<(左移操作符)

>> 右移操作符

两种移法:

1、算术右移:(右移一位有除 2 的效果)

右边丢弃,左边补原符号位,正数补 0负数补 1

2、逻辑右移:

右边丢弃,左边补 0

两种方法移动的都是二进制

<< 左移操作符

一种移法:

左边丢弃,右边补 0


位操作符(二进制): &按位与)、|按位或)、^按位异或

&(按位与)

两个同时为 1 才为 1 

|(按位或)

  1 个 1 是 1,无 1 记 0

 ^(按位异或)

相同为 0 ,不同为 1


 赋值操作符:=

变量在创建时给的值叫 初始化,变量已有后给的值叫 赋值

连续赋值:从右往左

#include<stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = b = a + 2;
    printf("%d", c);
    return 0;
}

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

基本原理相同

eg:a += b        意思就是        a = a + b

        a -= b        意思就是        a = a - b

        a |= b        意思就是         a = a | b


单目操作符:(逻辑反操作)真变成假,假变成真

                      &(取地址)取变量地址 和指针配合使用

                       -(负值)

                       +(正值)

                       sizeof操作符的类型长度,以字节为单位使用时后面需要括号()指明对象

                       ~按位取反)(二进制中 1 变成 0,0 变成 1)

                       --(前置后置--)

                       ++(前置后置++)

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

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

(逻辑反操作)真变成假,假变成真 

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

 


逻辑运算符: && 逻辑与、|| 逻辑或、 逻辑非

&& 逻辑与,当左操作符为假 0 时,右操作符不用运算

 || 逻辑或,当左操作符为真 1 时,有操作符不用运算


 条件操作符:exp1 ?exp2:exp3

int  a = (b > c ? 1:0);


 逗号操作符:

int a = (  表达式 , 表达式 , 表达式 , 表达式 );

从左往右算,最后结果为 a 的值


点操作符: . 用于操作结构体成员

#include<stdio.h>
struct stu
{
    int age;
    char name[10];
    char id[20];
};

int main()
{
    struct stu s1 = { 20,"lmx","202142211"};
    /*printf("年龄%d\n", s1.age);
    printf("%s\n", s1.name);
    printf("%s\n", s1.id);*/
    struct stu* ps = &s1;
    printf("%d\n", ps->age);
    printf("%s\n", ps->name);
    printf("%s\n", ps->id);
    return 0;
}

 


 整型提升,计算过程中有些是达不到整形,变成整形再参与运算

#include<stdio.h>
int main()
{
    char a = 3;
    //00000000000000000000000000000011
    //a 内只能存一个字节(8位)
    //00000011 - a
    char b = 127;
    //00000000000000000000000001111111
    //b 内只能存一个字节(8位)
    //01111111 - b
    char c = a + b;
    //a 和 b 相加
    //00000000000000000000000000000011 - a
    //00000000000000000000000001111111 - b
    //00000000000000000000000010000010
    //
    //c 内只能存一个字节(8位)
    //10000010 - c
    printf("c=%d\n", c);//打印原码
    //11111111111111111111111110000010 - 补码
    //原码取反加一得到补码,补码减一取反得到原码
    // 补码减一得到反码
    //11111111111111111111111110000001 - 反码
    //10000000000000000000000001111110 - 原码
    //-126
    return 0;
}

整数有三种表达形式:正数的原码、补码、反码都是一样的

原码反码补码存储到内存中

eg: -1

原码:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

首位符号位 + 二进制数

反码:1 1 1 1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

符号位不变,其他位按位取反

补码:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

反码加 1 得到补码,内存里放的是补码


算术转换:

long double

double

float

unsigned long int

long int

int 

不同的类型之间的运算,小的类型会变成大的类型进行运算

 


操作符的属性:

1、操作符的优先级

2、操作符的结合性

3、是否控制求值顺序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值