热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

类型转换和运算符优先级问题

下面想跟大家分享一下,请大家看下面一个例子,看看结果是什么?#include<iostream>usingnamespacestd;intmain()

下面想跟大家分享一下,请大家看下面一个例子,看看结果是什么?

#include

using namespace std;

int main()

{

  • unsigned char a = 0xA5;
  • unsigned char b = ~a>>4;      (1)

  • unsigned char c = (~a)>>4;

  • unsigned char d = (unsigned char)~a>>4;

  • unsigned char e = ((unsigned char)(~a))>>4;

  • unsigned char f = (unsigned char)(~a>>4);

  • printf("b = %d/n", b);
  • printf("c = %d/n", c);
  • printf("d = %d/n", d);
  • printf("e = %d/n", e);
  • printf("f = %d/n", f);
  • return 0;

}

要考虑的问题是:

  • 1、是否存在隐式类型转换?

    2、~和<<运算符哪个优先级高?

那么现在通过对(1)进行分析,对以上2个问题进行解答:

  • 1、虽然a是unsigned char, 计算这个表达式的时候编译器会先把a和4转换成int类型再计算,把结果转换成unsigned char赋值给b。

    2、~的优先级高于>>。

因此,首先对a进行整数提升,于是~a编程了0xFFFFFF5A。然后对a右移4位,得到0x0FFFFFF5。最后转换成unsigned char赋值给b,所以结果是245。

依次类推,最后的结果是:

b = 245

c = 245

d = 5

e = 5

f = 245

怎么样,小小几行代码也暗藏很多玄机吧。


推荐阅读
  • 为了加速游戏,一提起汇编语言,大家也许会感到很神秘。其实如果你学起来就会发现,它并非想象中那样难。特别是内嵌汇编,由于它和C++紧密结合,使你不必考虑很多烦琐的细节(例如输入输出函数的写法),学习起来 ... [详细]
  • IwasstudyingfasterIOmethodsforprogrammingproblems,Ifoundoutthismethodofusinggetchar ... [详细]
  • 第3章 感受(一)——3.1. Hello world 经典版
    [回到目录]白话C++第3章.感受Helloworld!,HelloC++,我们来了!3.1.Helloworld经典版毫无疑义,一 ... [详细]
  • 从vc6.0转到vs20052008等出现的错误详解(HYD整理)最近开发平台由VC6.0升级至VS2005,需要将原有的项目迁移,特将碰到的问题归纳如下:1消 ... [详细]
  • 第五周项目一——体验常成员函数(1)
    设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等。在设计中,由于求距离、求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成 ... [详细]
  • 对象内存地址
    主  题 ... [详细]
  • 结构体在内存中的对齐规则
    一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一:#include<iostream ... [详细]
  • CC++如何复制 ... [详细]
  • #include<iostream>usingnamespacestd;#defineN4charboard[N][N];intcol[N]; ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • HDU1787欧拉函数之在线算法欧拉函数的介绍:φ函数的值通式:φ(x)x(1-1p1)(1-1p2)(1-1p3)(1-1p4)…..(1-1pn),其中p1,p2…… ... [详细]
author-avatar
于磊com
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有