首页 > 其他分享 >C语言操作符

C语言操作符

时间:2022-10-06 20:05:31浏览次数:56  
标签:int C语言 stu 操作符 include CPU 表达式

1.在进行除法运算的时候,如果两个操作数都是整数,那么结果就是整数。要想得到的结果是浮点数,至少有一个操作数是浮点数,最后的结果也是定义为浮点类型。

C语言操作符_操作符

2.在进行取模运算的时候,两个操作数都必须是整数,不能是小数。

3.右移分为算术右移和逻辑右移:

  • 算术右移

    右边丢弃,左边补原符号位

  •  逻辑右移

    右边丢弃,左边补0

左移操作符:左边丢弃,右边补0

在我们C语言编程环境中,一般使用的都是算术右移

整数在内存的存储都是以补码的形式存储的,正整数的源码,反码,补码三者相同。

4.不能创建临时变量,交换两个数

  • 加减法(因为a,b都是整型,所以存储范围都是有限的,当a,b的值过大的时候,就有可能会产生溢出)

#define _CRT_SRCURE_NO_WARNINGS

#include <stdio.h>

int main()

{

    int a=3;

        int b=5;

        a=a+b;

        b=a-b;

        a=a-b;

        printf("a=%d\nb=%d\n",a,b);

        return 0;

}

  • 异或的方法

#define _CRT_SRCURE_NO_WARNINGS

#include <stdio.h>

int main()

{

    int a=3;

    int b=5;

    a=a^b;

    b=a^b;

    a=a^b;

    printf("a=%d\nb=%d\n",a,b);

    return 0;

}

5.求一个整数存储在内存中二进制中1的个数

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int main()

{

       int a = 0;

       int i = 0;

       int count = 0;

       printf("请输入一个数:>");

       scanf("%d", &a);

       for (i = 0; i < 32; i++)

       {

              if ((a>>i & 1) == 1)

              {

                      count++;

              }

       }

       printf("%d\n", count);

       return 0;

}

6.sizeof 运算符只负责计算空间大小,即使里面进行了运算,但是不会真的改变其大小

C语言操作符_#include_02

7.逻辑与有一个特点就是,从左向右与的时候,一旦左边出现假,即结果为0,那么右边的操作便不再进行。

逻辑或的特点是一旦最左边为真,即为1,那么右边的操作便不再进行

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int main()

{

       int i= 0,a=0,b=2,c=3,d=4;

       i = a++ && ++b && d++;

       printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);

       return 0;

}

结果为1 2 3 4 

8.三目操作符

exp1? exp2:exp3;如果表达式1为真,就执行表达式2,为假就执行表达式3

9.逗号表达式

exp1,exp2,exp3,exp4,exp5……

逗号表达式,就是用逗号隔开的多个表达式,逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

10.访问一个结构的成员

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

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

struct Student

{

       char name[10];

       int age;

       char sex[5];

       double score;

};//定义一个结构体

void set_age1(struct Student stu)

{

       stu.name = 18;

}

void set_age2(struct Student*  pStu)

{

       pStu->age = 18;

}

int main()

{

       struct Student stu;//在这里,struct Student就类似于int,是一种类型,被称为结构体类型

       struct Student* pstu = &stu;//定义一个结构体指针,因为stu是结构体变量,所以存储其地址的指针类型叫做结构体指针

       stu.age = 20;//结构体成员访问

       set_age1(stu);

       pstu->age = 20;//结构体成员访问

       set_age2(pstu);

       return 0;

}

11.隐式类型转换

  • 整形提升是按照变量的数据类型的符号位来提升的。即如果符号位为1,那么前面就补1,如果符号位为0,那么前面就补0。凡是对操作数进行运行算的,都会进行整型提升。

整型提升的意义:

表达式的整型运算要在CPU的相应运算去件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。

因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。

通用CPU是难以直接实现两个8比特字节直接相加运算(虽然及其指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行。

  • 算术类型转换

   long double

   double

   float

   unsigned long int

   long int

   unsigned int

   int

从下到上类型等级依次提高,如果不同等级同时出现,要转换成等级较高的类型。

12.操作符的属性

复杂表达式的求值有三个影响因素:

        1.操作符的优先级

        2.操作符的结合性

        3.是否控制求值顺序

两个相邻的操作符先执行哪个?取决于他们的优先级,如果两者的优先级相同,再取决于操作符的结合性

标签:int,C语言,stu,操作符,include,CPU,表达式
From: https://blog.51cto.com/u_15760583/5733985

相关文章