IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言/C++】操作符详解(一) -> 正文阅读

[C++知识库]【C语言/C++】操作符详解(一)

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进制)位与:
在这里插入图片描述
2、| – 按(2进制)位或:
在这里插入图片描述
3、^ – 按(2进制)位异或
在这里插入图片描述
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、整数在进行打印等操作时使用的是原码
在这里插入图片描述

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

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

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++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:50:34  更:2022-03-03 15:52:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:31:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码