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++知识库]操作符浅解

1.移位操作符

作用的对象是数的二进制位。

(1):>>

向左边移动一位,左边丢弃,右边补0;相当于这个数乘以2移动n位,相当于乘以2的n次方。

int main()
{
int a=2;
int b=a<<1;//打a的二进制向左移动一位
printf("b=%d",b);
return 0;
}

(2)>>

向右边移动,因为二进制位的第一个数表示数的正负,所以向右移时分为两种情况;

1.算术右移:右边丢弃,左边补原符号位(1表示负数,0表示整数)

2.逻辑右移:右边丢弃,左边补0.

?在vs编译器下采用的是算术右移;

(3)数的原码,补码,反码:

?2.逗号表达式

#include <stdio.h>
int main()
{

	int a, b, c;

	a = 5;

	c = ++a;// ++a:加给a+1,结果为6,用加完之后的结果给c赋值,因此:a = 6??c = 6

	b = ++c, c++, ++a, a++;

   // 逗号表达式的优先级,最低,这里先算b=++c, b得到的是++c后的结果,b是7

   // b=++c 和后边的构成逗号表达式,依次从左向右计算的。

   // 表达式结束时,c++和,++a,a++会给a+2,给c加1,此时c:8,a:8,b:7

	b += a++ + c;?// a先和c加,结果为16,在加上b的值7,比的结果为23,最后给a加1,a的值为9

	printf("a = %d b = %d c = %d\n:", a, b, c);?// a:9, b:23, c:8

	return 0;

}
题目:以下程序的输出结果是:
int main()
{
int x,y,z;
x=1;
y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
return 0;
}
[A]2,3,3 [B]2,3,2 [C]2,3,1 [D]1,1,1
//解析:
//x和y的值经过自增以后分别为2和3,D可以排除。剩下3个选项选择什么呢?
//如果是(x++,y++,++y)实际上可以看成(1,1,3)整个逗号表达式的值应该是3,那么选A。
//如果是(x++,++y,y++)实际上可以看成(1,2,2)整个逗号表达式的值应该是2,那么选B。
//但这是错的,这儿还有赋值运算符。赋值运算符的优先级是14,而逗号表达式的优先级是15,也就是说上面的
//表达式中应该等价于这样的结合:(z=x++),y++,++y;如果这样写的话,则答案很清晰,为:2,3,1.正确
//答案选C。

3.逻辑运算:

逻辑运算符&&:

例1.

?&&为并且符号,全部为真才为真。而a++是先用再加。所以第一个a++为0,为假;所以后面的计算都不会继续,所以a=1;

结果为:1 2 3 4

例2.

逻辑运算符||

例3.

结果为2 2 3 4

原因:在计算过程中,a++的结果为1,表示真;而在||运算中,出现真就表示真,所以后面的结果都没有计算。a=2;

总结:不论是&&还是||,只要出现了确切的结果就不会继续计算。比如1.中,a++的结果为0,并且为&&逻辑运算符,则出现假结果为假,所以后面不会计算。

3.中为||运算,而a++的结果为1,表示真,整个式子结果为真,所以后面不会继续计算。

4.整数提升

int main()
{
    char a=5;
    char b=126;
    char c=a+b;
    printf("%d",c);
    return 0;
}

?程序的运行结果为-125;

运算过程:

int main()
{
    char a=5;
    char b=126;
    char c=a+b;
    printf("%d\n",c);->-125
}
计算过程:
char a的原码为 00000101;
由于CPU计算都是以int型进行计算,因为cpu用int类型计算的速度最快。所以char通过整数提升的方式变为
00000000000000000000000000000101;
同样b为
00000000000000000000000001111110;
所以a+b为
00000000000000000000000010000011;
c为char类型为8个二进制位
10000011
在char类型中为一个负数,所以在符号位前面添1;
11111111111111111111111110000011;在计算机中以补码形式储存
11111111111111111111111110000010;反码
10000000000000000000000001111101;原码->-125

整数提升的实例:

int main()
{
char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if (a == 0xb6)
    printf("a");
if (b == 0xb600)
    printf("b");
if (c == 0xb6000000)
    printf("c");
return 0;
  }
  //最后的结果是输出'c',由于整数提升,char和short类型的变量在计算机内部
  //存储的方式发生了变化。

?整数提升的规则:

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:01:39  更:2021-11-18 11:03:37 
 
开发: 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 8:02:39-

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