`
insertyou
  • 浏览: 904777 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

表达式之谜总结

 
阅读更多

一、奇数表达问题

问题:我们经常会认为i%2==1能够判断是否为奇数。

分析:

(1)取模操作符(%):当取余操作返回一个非零的结果时,这个结果一定和左操作符有相同的符号。

举例:

  • 3%2=1;
  • -3%2=-1;对应前面的定义,由于左操作符是-3,因此结果应该也是负数。

(2)初步结果:通过i%2==0来判断是否为奇数。

(3)位运算:位运算比一般的算术运算速度快的多。一般偶数的二进制最低位都是0,不管是用原码、补码。

最终结果:i&1)!=0

例程:



二、二进制浮点数运算的精度问题

问题:2.00-1.10的结果是什么?

分析:

(1)看起来好像很明确是0.90,但是实际上输出的是0.899999。原因:1.10不能被精确的表示成一个double。

(2)因此double和float不适用于精确计算。

(3)java.math.BigDecimal用于精确计算。

(4)用BigDecimal(String)的构造器,而不要用BigDecimal(double)的构造器,因为后者有不可预知性。

最终结果:

new BigDecimal("2.00").subtract(new BigDecimal("1.10"));



三、默认类型问题

问题:long a = 24*60*60*1000*1000;的结果是多少?

分析:

(1)默认来说一个整数的类型就是int,如果是long的话要加L。

(2)以上的运算会先是int的乘法,乘完的结果再转换成long类型,这并不能避免溢出。

(3)int是4字节,因此能表示-231-1~231,而上面的运算远远超出了这个范围,因此溢出。

最终结果:

long a = 24L*60*60*1000*1000;



四、长整数的表示问题 l还是L?

因为在一般的1和l是差不多的,比如:


最终结果:

(1)在表示long类型的数时要用L.

(2)在表示变量时不能光用 l(小写的L) 表示.


五、符号扩展和零扩展

问题1:long a = 0xcafebabe;中a的十六进制是多少呢?

分析:

(1)对于有符号数进行扩展时,就需要进行符号扩展。而对于无符号数(char)则采用零扩展。

(2)十六进制和八进制的int型时当最高位是1时,就是负数,符号扩展则高位填1.

最终结果:

结果是0xffffffffcafebabe而不是0x00000000cafebabe;



问题2:int a = (int)(char)-1;的结果是多少?

分析:

(1)-1是int类型的,转换成char,只需要截断即可,得0xffff.

(2)因为char是无符号的,因此零扩展,则a=0x0000ffff,即65535.

最终结果:

a=65535.



总结:

(1)我们对于类型转换的扩展问题需要注释好意义。

(2)对于无符号扩展也可以通过位掩码来进行完成。

比如:

short s = -1;

int i = s&0xffff;//由于0xffff是int型的,因此s先进行符号扩展成int型,然后进行与,即把高位清除。

六、条件表达式的规则?:

问题:

int i =0;

true? 'x':i;的结果是多少?

A?B:C

1.如果B和C具有相同的类型,则返回的就是B和C的类型。

2.如果一个操作数的类型是T(byte,int,char等),另一个是一个常量表达式,则返回的类型就是T。

3.否则对操作数类型进行二进制数字的提升,返回的类型就是B和C被二进制提升后的类型。

例如:

int i =0;

true? 'x':i;这个由定理2,可以得出结果是int类型,因此结果是‘x’的ASCII码:120;

结论:尽量将B和C的类型相同。


?:在jdk1.4和jdk1.5的区别:

在1.4中,当第二个操作数和第三个操作数都是引用类型时,条件操作符要求一个必须是另一个的子类型。

5.0中,第二第三个操作数是引用类型时,返回的结果是两类型的最小公共超类。

七、x+=i和x=x+i相等?不!

x+=i等价于x=(Typex)(x+i)从中看出,中间还有一个隐式的类型转换。

如果 x是short类型,i是int类型,则x+=i等价于x=(short)(x+i);

而x=x+i;则没有这个隐式转换,因此如果x的类型的宽度比i的类型的宽度小,则会发生x=x+i的编译错误,而x+=i不会有错。



但是复合的赋值操作符有一个限制:

(1)左操作数和右操作数都必须是基本数据类型或包装类

(2)如果左操作数的类型是String,则右操作数没有限制。

(3)左操作数不能是其他引用数据类型。

而x=x+i却没有这个限制。



分享到:
评论

相关推荐

    代码之谜(持续更新)1

    代码之谜(二)讨论了语句与表达式的区别和联系。该篇博客旨在让读者更好地理解代码中的语句和表达式。 5. 代码之谜(三)- 运算符 代码之谜(三)讨论了运算符的概念和应用。该篇博客旨在让读者更好地理解代码中...

    CTF知识总结,写的不错

    在网络安全领域,Capture The Flag (CTF) 是一种常见的竞赛形式,参赛者通过解谜、逆向工程、网络攻防等手段获取“旗子”(代表分数或成就)。以下是对CTF相关知识的详细总结: 1. **PHP技巧** - **异常处理**:在...

    Android代码-kotlin-riddler

    总结: "Android代码-kotlin-riddler"项目展示了如何使用Kotlin在Android平台上构建一个解谜应用。通过学习这个项目,开发者不仅可以掌握Kotlin的基础语法和高级特性,还能了解到Android开发的最佳实践,包括UI设计...

    adventofcode_2020_myway:解决https://adventofcode.com2020上的2020 Code of Advent之谜的方法

    总结起来,这个项目展示了在面对Advent of Code这样的编程挑战时,PowerShell如何以其独特的灵活性、易用性和强大的数据处理能力,成为解决问题的理想工具。通过研究并实践这些脚本,开发者可以深入理解PowerShell的...

    河北省邢台市第二中学高中数学2.1.1曲线与方程学案无答案新人教A版选修2_1

    在数学的广袤天地中,解析几何无疑是一块重要的基石,它将几何图形与代数方程紧密相连,使得通过代数方程来研究几何图形成为可能。...掌握了曲线与方程的联系,学生们将能更好地解开这些数学之谜。

    趣味离散数学(离散课外资料)

    描述中提到的“变抽象的理论知识为生动活泼的趣味游戏”指的是在教学和学习的过程中,将晦涩难懂的理论知识通过设计游戏、解谜活动等手段使之变得易于理解和接受。比如在文档内容中,通过描述一个围棋子颜色猜测的...

    新北师大八下多边形的内角和与外角和公开课PPT学习教案.pptx

    本次我们所探讨的《新北师大八下多边形的内角和与外角和公开课PPT学习教案》就为我们打开了探索多边形之谜的大门。 首先,为什么我们要探讨多边形的内角和与外角和呢?从会计学的角度来看,掌握这一知识点就好比是...

    前端大厂最新面试题-bit-manipulation.docx

    本文档总结了前端大厂的最新面试题,主要集中在位运算方面的知识点。通过对题目的分析,我们可以总结出以下几个方面的知识点: 1. 位运算的基本概念 在计算机科学中,位运算是一种基本的操作,用于对二进制数进行...

    正十七边形尺规作图和详解.doc

    在数学的历史长河中,正十七边形的尺规作图问题曾是一个长久未解的谜。直到1796年,年轻的德国数学家高斯(Johann Carl Friedrich Gauss)运用其精湛的几何直觉和创新的代数方法,成功解决了这一问题,从而在数学界...

    数据结构与算法常考知识点.zip

    本资料“数据结构与算法常考知识点.zip”包含了对这一领域的重点知识的总结,特别适合准备面试或深入学习的程序员。 首先,我们要理解数据结构。数据结构是数据的组织形式,它定义了数据如何在内存中存储和访问。...

    5年级-小学奥数举一反三(下册).doc

    算式谜(第32讲)则要求学生不仅要理解数学知识,还要学会构造符合特定条件的算术表达式。这种能力对于培养学生的创新思维和解决复杂问题的能力尤为重要。 容斥原理(第33讲)是数学中的一个重要概念,它在处理集合...

    python必备词汇.pdf

    本文将对这些词汇进行解释和总结,帮助读者快速掌握 Python 必备词汇。 一、计算机基础概念 * computational:计算的,电脑的 * mode:模式 * primitive:原始、基元,是后续操作的基础 * gigabyte:千兆字节,是...

    对于数据结构和算法类的东西,我工作有些年份了,大学也有所涉猎,积累了一些内容,不高产不母猪,打我自己脸.zip

    这个压缩包文件"对于数据结构和算法类的东西,我工作有些年份了,大学也有所涉猎,积累了一些内容,不高产不母猪,打我自己脸.zip"显然包含了一位有经验的IT从业者对数据结构深入理解和实践的总结。尽管没有提供具体...

    adventofcode:流行的拼图比赛

    AOC的挑战往往有共同之处,善于总结和复用代码能提升解题速度。 在`adventofcode-main`这个压缩包中,很可能包含了历年的AOC挑战问题和对应的Python解决方案。通过学习这些代码,可以深入理解上述知识点在实际问题...

    leetcode_py3:Python 3的LeetCode问题解决方案(尽可能采用Python方式)

    - **列表(List)**:列表是Python中最常用的数据结构之一,支持索引和切片操作,以及append、extend、insert、remove等方法。 - **字典(Dictionary)**:字典以键值对的形式存储数据,查找速度快,适用于映射和关联...

    DataStructures-And-Algorithms:各种数据结构和算法的摘要存储库

    在这个名为"DataStructures-And-Algorithms"的存储库中,重点在于Java语言实现的各种数据结构和算法的总结。让我们深入探讨一下其中可能包含的知识点。 1. **数据结构**: - **数组**:最基础的数据结构,用于存储...

Global site tag (gtag.js) - Google Analytics