【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、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
在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:● QT工具(qt设计师,qt预言家,qt助手,qt例子); QT跨平台移植 [url=]Android[/url],[url=]IOS[/url],Windows,Linux, Mac 打包部署 移 ●页面基本控件 动 ●内容区域、列表与对话框应用 框 ●表单控件 架 ●主题定制 与 ●网格布局与页面创建、加载、跳转 设 ●动态内容整合 计 ●插件应用 模 ●设计模式与Boost ,ACE ,QT,cocos2dx详解 工厂模式,单例模式等等23种设计模式 式 ●设计模式与Boost ,ACE ,QT,cocos2dx详解 工厂模式,单例模式等等23种设计模式,UML实战 数 ●动态数组模板库 数组栈 数组队列库,字符串库 据 ●链表模板库,单链表,双链表,环链表 结 ●链式栈,链式队列 数组嵌套与链表嵌套 构 ●二叉树,线索二叉树模板库,优先队列库 部 ●哈弗曼树模板库 分 ●Tree B Tree 模板库 ●最大堆最小堆库 ●红黑树模板库 ●图模板库 ●排序模板库,数组排序,链表排序 ●贪心算法,背包算法,高级递归,动态规划 项 目 打飞机游戏 实 战 下载地址:关注wx公众号feixueteam。 C / C++ 语言中的 vector 是一个动态数组容器,它可以根据需要动态地增加或减少元素。通过使用 vector,你可以方便地处理变长数组,而无需手动处理内存分配和释放。在 C++ 中,vector 是标准模板库(STL)提供的容器之一,它提供了一系列的方法和操作符,使得对数组的操作更加方便和高效。你可以使用 vector 类型来声明一个变量,并通过调用其方法来添加、删除、访问和修改元素。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值