操作符详解

简介: 操作符详解

算术操作符

+,-,*,/,%

主要是注意 % 运算符

该运算符只能用于整数,得到的是余数。其他的都比较简单

🥇移位操作符

移位操作符是移动的二进制位,并且只能是整数

  • 右移操作符==>>==
    在这里我只讲一种,那就是算术移位
    即右边的抛弃,左边补充符号位
  • 例如;
  char a=5;
  char b;
  b=a>>2;
  a二进制00000101
  右移2位00000001得到b
  b=1;
  • 左移操作符==<<==
    向左移动几位,那么左边就抛弃几位,后面就添加几个0。
    例如:
  char a=2;
  char b;
  b=a<<2;
  a二进制00000010
  左移2位00001000
  即b的二进制就是00001000;
  即b=8;

🥈位操作符

也是对二进制进行的操作。这是双目操作符

&,|,^

  • &按位与,有一个位为0就是0
  • |按位或,有一个位为1就是1
  • ^按位异或,相同为0,相异为1
int main()
{
  int a = 1;
  01
  int b = 2;
  10
  a&b 00——》0
  a|b 11——》3
  a^b 11——》3
  printf("%d\n%d\n%d\n", a&b,a|b,a^b);
  return 0;
}

看结果:

赋值操作符

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

太简单不要说

🥉单目操作符

单目操作符:只有一个操作数

  • (+ -) 就是我们平时的正负号
  • ~ 它表示的意思是对一个数的二进制按位取反 ,也就是1变0,0变1。
#include <stdio.h>
int main()
{
    int a=0;
    int b=~a;
    printf("%d",b);
    return 0;
}

输出结果是-1。

  • 逻辑非

它的作用把真变假, 把假变真

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

此处并不会有什么会打印出来

因为假就不执行if条件

  • ++:包括后置++(先使用,后++)和前置++(先++,后使用)。
  • - - 同理

如:

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

输出结果为:a=11,b=10,c=11,d=11.


sizeof 操作符

可以算类型的大小,变量的大小。返回值以字节为单位

() 表示强制类型转换

如:int a=(int)3.14;从“double”转换到“int”,可能丢失数据。

但是(int)强制转换就不会出现警告。


& 取地址操作符

关系操作符

>=,>,<=,<,==

太简单了


逻辑操作符

&& 逻辑与

只要左边的表达式有一个为假,那么后面的表达式就不用进行运算了

|| 逻辑或

只要右边的表达式有一个为真,那么后面的表达式就不用进行运算了

条件操作符

条件操作符:exp1?exp2:exp3 它的意思是:表达式1?表达式2:表达式3

它是这样运行的:

如果表达式1成立,表达式2执行;

如果表达式1不成立,表达式3执行。

#include <stdio.h>
int main()
{
    int a=10,b=20;
    int MAX=(a>b?a:b);
    printf("MAX=%d",MAX);
    return 0;
}

此输出的结果是MAX=20.

逗号表达式

逗号表达式:(exp1,exp2,等等)

整个逗号表达式的结果为最后一个表达式的执行结果,不管前面的执行结果是对是错。

看下面的代码:

#include <stdio.h>
int main()
{
  int a = 10;
  int b = 20;
  int c = 30;
  int m = (a < b, a++, b > c, c++, b + c + a);
  printf("%d\n", m);
  return 0;
}

它的运行结果为:


对这个进行分析(a < b, a++, b > c, c++, b + c + a)


首先a<b成立 继续a++,a变成11,b>c不成立,不用管继续,c++,c变成31,最后执行b+c+a,结果为62,即为m的结果.


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

[]下标引用操作符

  • ()函数调用操作符

结构体访问操作符

. 结构体.成员

->结构体指针成员

上述这些在以后的指针,结构体中会经常用到,暂时不举例子


增加的部分

常见关键字(以下讲解的只是部分)


register signed unsigned typedef


register int a;表示建议把a定义成寄存器变量,因为寄存器的运行速度比内存快。


signed表示有符号数,int 其实是signed int 只不过signed省略了。


unsigned表示无符号数,只有正数,其类型范围也将变大,只是正数范围。

typedef表示类型重定义,如:

#include <stdio.h>
int main()
{
    typedef unsigned int u_int;
    u_int a=10;
    printf("%d",a);
    return 0;
}

其输出的结果是10.

这里只是把unsigned int 换了一个叫u_int 的名字.

相关文章
|
8月前
|
存储 索引
【操作符】
【操作符】
25 0
|
1月前
|
存储 编译器
操作符详解1(一)
本文介绍了编程中的操作符分类和位操作,包括算术操作符(如 +, -, *, /, %)、移位操作符(<<, >>)、位操作符(&, |, ^)、赋值操作符、单目操作符、关系操作符、逻辑操作符和条件操作符。还讨论了原码、反码和补码的概念,以及左移(<<)和右移(>>)操作符的工作原理,包括逻辑右移和算术右移的区别。最后提到了位操作符按位与(&)、按位或(|)、按位异或(^)和按位取反(~)的运算规则。
23 1
|
1月前
|
存储 C语言
操作符详解2(一)
C语言操作符具有优先级和结合性,决定表达式求值顺序。优先级高的运算符先执行,相同优先级时看结合性,左结合从左到右,右结合从右到左。例如,3+4*5中乘法优先级高于加法,5*6/2中乘法和除法优先级相同,但都是左结合,所以先计算5*6。圆括号具有最高优先级,可改变其他运算符优先级。表达式求值时,整型运算以缺省整型精度进行,小整型值会被提升为int或unsigned int。正数提升时高位补0,负数提升时高位补1,无符号整型提升始终补0。
29 0
|
1月前
|
编译器 C语言 C++
操作符详解2(二)
本文介绍了编程中的操作符转换和表达式解析规则。当操作数类型不同时,会进行寻常算术转换,按照long double、double、float等类型顺序进行向上转换。表达式求值时,虽然操作符有优先级,但不能决定操作数的求值顺序,例如`a*b + c*d + e+f`中乘法先于加法,但具体计算顺序不确定,可能导致不同结果。同样,如`c++ + c--`这样的表达式也是有歧义的,因为++和--的左右结合性不能确定操作数的获取顺序。文章强调,复杂的表达式可能因编译器差异产生不同结果,应避免使用可能导致非唯一计算路径的表达式以减少潜在风险。
22 0
|
1月前
|
Unix 编译器 C语言
操作符详解
操作符详解
|
1月前
|
编译器 索引
操作符详解3
操作符详解3
22 0
|
6月前
|
存储 编译器
操作符详解(1)
操作符详解(1)
27 0
|
11月前
|
编译器
详解操作符(下)
详解操作符(下)
|
10月前
|
C语言 索引
【C】操作符详解
今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:
|
10月前
|
存储 编译器 C语言
7.27C语言知识点之操作符
7.27C语言知识点之操作符
44 0