【C语言/C++】操作符详解(一)

文章目录

  • 1、引言
  • 2、操作符分类
    • 2.1、算数操作符
    • 2.2、移位操作符
    • 2.3、位操作符
    • 2.4、复合赋值操作符
    • 2.5、单目操作符
    • 2.6、双目操作符
    • 2.7、关系操作符
    • 2.8、逻辑操作符
    • 2.9、三目操作符(问号表达式)
  • 小知识

1、引言

今天学习的内容是C语言中的操作符

2、操作符分类

2.1、算数操作符

1、算数操作符中的“%”的左右两端必须是整数,求得的是余数。余数的范围是1~被除数
2、算数操作符中的“/”,求得的是两数相除的商,当“/”除号的两端都是整数的时候,执行的是整数的除法,两段只要有一个是浮点数,执行的就是浮点数除法(即当10/3=3;10/3.0=3.3333无限循环)。

2.2、移位操作符

移位操作符的操作对象只能是整数

1、左移操作符,把a在内存中存储的二进制补码向左移动两位(即把a的补码向左移动两位),左边抛弃,右边补0

int main()
{
   int a = 5;
   int b = a<<2;
   printf("%d\n",b);
   return 0;
}

2、右移操作符:
Ⅰ、算数右移:(右边丢弃,左边补原来的符号位)
Ⅱ、逻辑右移:(右边丢弃,左边补0)
tips:到底是算数右移动,还是逻辑右移,具体要看编译器,常见的编译器都是算数右移动

2.3、位操作符

位操作符操作对象只能是整数

1、& – 按(2进制)位与:
【C语言/C++】操作符详解(一)_第1张图片
2、| – 按(2进制)位或:
【C语言/C++】操作符详解(一)_第2张图片
3、^ – 按(2进制)位异或
【C语言/C++】操作符详解(一)_第3张图片
Tips:
1、任何数字和 0 异或都是它本身
2、两个相同的数字异或得到的结果是 0

2.4、复合赋值操作符

1、+= / -= (加等/减等)
例如a+=10可以看做 a=a+10,a-=10可以看做a=a-10
2、这些复合操作符的本质就是将两个操作符的功能叠加起来

2.5、单目操作符

1、!逻辑反操作
2、& 取地址操作符
3、sizeof 操作数的类型长度(以字节为单位)
4、~ 对一个数的二进制按位取反(用法如下)

int main()
{
   int a = 0;
   // ~ 按(内存中补码的2进制)位取反
   printf("%d\n", ~a);
   return 0;
}

5、++运算符:分为前置++(先加1,后使用,即先使用变量中内容,然后给结果加1),还有后置++(先使用变量中内容,整个表达式结束时,给变量加1)
6、* 间接访问操作符(解引用操作符)

int main()
{
   int a = 10;
   int* pa = &a;
   *pa = 20; //解引用
   printf("%d\n", a);
   return 0;
}

7、(类型):强制类型转化,例子如下

int main()
{
   int a = (int)3.14; //3.14 --double->int a (由双精度浮点型变为整型)
   printf("%d\n",a);//其实只打印3.14的整数部分
   return 0;
}

2.6、双目操作符

操作符左右两边各有一个操作数的就叫双目操作符

2.7、关系操作符

1、= 是赋值,而 == 是等于的意思,使用时,用下面的方法可以减少错误率

int main()
{
   int a = 5;
   if(5 = a);//将变量放在右边能降低错误率
   {
      printf("haozai\n");
   }
   return 0;
}

2.8、逻辑操作符

1、&& 逻辑与:左操作数为假,右边不计算
2、 || 逻辑或:左操作数为真,右边不计算

2.9、三目操作符(问号表达式)

表达式1 ?表达式2 :表达式3;

int main()
{
   //比较两个数的大小
   int a = 10;
   int b = 20; 
   int max = 0;
   max = (a > b? a : b);
   return 0;
}

小知识

整数有3种二进制的表达形式,这3种形式分别为:**原码、反码、补码**

1、正整数 — 原码、反码、补码相同
2、负整数 — 原码、反码、补码不同
3、整数在内存中存储的是补码
4、整数在进行打印等操作时使用的是原码
【C语言/C++】操作符详解(一)_第4张图片

5、左值和右值:
左值,是可以放在等号左边的,一般为一块空间。
右值,是可以放在等号右边的,一般为一个值,或者一块空间的内容。

6、abs函数:对整数求绝对值;fabs函数:对小数求绝对值
7、逗号表达式:从左到右,依次计算,整个表达式的结果取最后一个表达式的值(逗号表达式的优先级最低)
8、sizeof 操作符 计算的结果的类型是 size_t(是无符号整型)
9、结构体

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

int main()
{
  struct Stu s = {"zhangsan" , 20, 85.5}; 
  //.
  printf("%s %d %.lf\n", s.name, s.age, s.score);//结构体变量.结构体成员
  //->
  struct Stu * ps = &s;
  printf("%s %d %.lf\n",(*ps).name, (*ps).age, (*ps).score);
  printf("%s %d %.lf\n", ps->name, ps->age, ps->score);
  //结构体指针->结构体成员
  return 0;
}

例题:不能创建临时变量(第三个变量),来实现两个数的交换

方法一:(不能解决a和b数字过大,整型不能承受的情况)

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;
}

方法二:(只能应用在整数上)

int main()
{
   int a = 3;
   int b = 5;
   printf("交换前: a=%d b=%d", a, b);
   a = a ^ b;
   b = a ^ b;//a ^ b ^ b
   a = a ^ b;
   printf("交换后: a=%d b=%d", a, b);
   return 0;
}

例题2
【C语言/C++】操作符详解(一)_第5张图片

你可能感兴趣的:(c语言,c++,开发语言)