`

谜题27-谜题34

阅读更多
谜题27:变化莫测的i值
public class Main27 {
	public static void main(String[] args) {

		int i =0;
		while(-1<<i!=0)i++;  //无限循环
		System.out.println(i);
}
}

因为-1左移32位是-1,因为移位操作符只使用右操作数的低5位作为移位长度。如果是long,使用低6位。负的移位长度只保留低5位而除去其他位的方式被转换为正的移位长度。
谜题31:循环者的鬼魂
请提供i的声明,使下面的循环变为一个无限循环
while(i!=0){
			i >>>=1;
		}

>>>为无符号右移,解决本谜题的关键在于>>>=是一个复合赋值操作符。它们可能会自动执行窄化原生类型转换,这种转换可能会丢失级数的信息,或是数值的精度。
假设申明如下 short i = -1;
i的初始值((short)0xffff)非0,循环执行,在移位时,首先将i提升为int类型,所有的算术操作都会对short,byte和char类型的操作数执行这样的提升。结果得到int数值是0xffffffff,然后这个数值右移1位,得到0x7fffffff,最后这个数值被存回short类型的i中,执行可怕的窄化原生类型转换,直接截取低16位,得到((short)0xffff),
回到的原点。如果i声明为short或byte,并初始化为负数,都会得到死循环,如果是char,就不会。
总之,不要在char,short或byte类型的变量上应用复合运算符。
谜题32:循环者的诅咒
如何定义i,j,使下面的循环为无限循环?
while(i<=j&&j<=i&&i!=j){ 	}

用包装类定义Integer i = new Integer(0);
Integer j =new Integer(0);
前两个子表达式(i<=j和j<=i)在i和j上执行解包转换,并且在数字上比较所产生的数值,第三个表达式,比较的是对象引用
谜题33:循环者遇到了狼人
提供i的定义,使下面循环无限
while(i!=0&&i==-i){	}

定义如下:int i = Integer.MIN_VALUE;或long i = Long.MIN_VALUE.
0具有唯一性的表示形式如果对int数值0取负,将得到0xffffffff+1,仍然是0。
但这也有个缺点,总共存在偶数个int数值,准确来说为2^32个,其中一个用来表示0,说明
正的和负的整数值的数量不等,至少有一个int数值,其负值不能正确的表示为int数值,
Integer.MIN_VALUE就是这样一个int数值,即-2^31,它的负值等于自身,Long也是。
谜题34:被计数击倒了
public class Main34 {
	public static void main(String[] args) {
		final int START = 2000000000;
		int count = 0;
		for(float f = START;f<START+50;f++){
			count++;
		}
		System.out.println(count); //0
	}
}

why?循环变量是float类型,而非int型,很小的浮点数加到很大的浮点数上时,不会改变大浮点数的数值的,f的初始值接近Integer.MAX_VALUE,因此需要用31位表示,而float类型只能提供24位的精度。将一个int与一个float比较时,会自动执行从int到float的提升。这种提升会导致精度丢失的三种拓宽原生类型转换之一(另外两个是
从long到float和从long到double
,换句话说,(float)2000000050==2000000000。
不要使用浮点数作为循环索引。
分享到:
评论

相关推荐

    算法谜题(算法谜题).pdf

    - **谜题部分**(第2章):按照难度分级,包括了易于上手的谜题、中等难度的谜题以及较为复杂的谜题。 - **提示与解答**(第3章与第4章):为每个谜题提供了详尽的解题思路和答案,便于读者对照学习。 #### 三、...

    算法谜题.pdf

    根据提供的信息,“算法谜题.pdf”这一文档似乎包含了一些与算法相关的谜题或者挑战问题,这类资料对于学习和深入理解算法具有重要的价值。虽然提供的具体内容部分仅包含了“混混藏书阁”的链接,并未直接给出关于...

    Java谜题Java谜题1——表达式谜题

    Java谜题1——表达式谜题 谜题1:奇数性 谜题2:找零时刻 谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2...

    算法谜题 英文版本

    - **主章节谜题**:分为三个难度等级,包括较易、中等难度和较难谜题。 - **引言谜题**:一个特别的谜题,旨在激发读者的兴趣。 - **提示部分**:提供了每个谜题的提示,帮助读者思考。 - **解答部分**:提供了每个...

    算法谜题(算法谜题)

    算法谜题是结合了传统谜题和计算机算法知识的一种智力游戏,旨在通过谜题的求解过程训练和培养算法思维能力。 本书分为四个部分:概览、谜题、提示和答案。概览部分主要介绍算法设计的通用策略和算法分析技术。算法...

    C++-VS2019-FourLights-四灯谜题-MFC应用程序.zip

    《C++与VS2019环境下的MFC应用程序:详解“四灯谜题”实现》 在IT领域,C++是一种广泛使用的编程语言,以其高效性和灵活性深受开发者喜爱。Visual Studio 2019(VS2019)作为微软推出的强大集成开发环境(IDE),为...

    PyPI 官网下载 | kociemba-1.2-cp27-cp27m-win32.whl

    这个库可能是为了帮助开发者编写程序来解决魔方谜题,或者进行相关的算法研究。 在使用这个库之前,确保你的系统满足Python 2.7和32位的要求。如果符合,你可以通过以下命令用pip安装: ```bash pip install path\...

    算法谜题_suanfa_算法谜题_

    《算法谜题》一书是专门为那些热爱挑战和探索算法深度的读者准备的。它将算法与谜题相结合,旨在通过一系列有趣的问题,帮助读者深入理解并提升算法设计与分析的能力。书中涵盖的不仅仅是基础算法,还涉及了高级算法...

    java谜题.rar

    Java谜题1——表达式谜题.htm Java谜题2——字符谜题.htm Java谜题3——循环谜题.htm Java谜题4——异常谜题.htm Java谜题5——类谜题.htm Java谜题6——库谜题.htm Java谜题7——更多的类谜题.htm Java谜题8——更...

    C语言的谜题 | | 酷 壳 - CoolShell1

    C语言的谜题 C语言是一种古老的编程语言,但它依然广泛应用于各种领域。C语言的设计目标是提供一种高效、灵活、可移植的编程语言,能够在各种平台上运行。C语言的设计者Dennis Ritchie和Brian Kernighan认为,C语言...

    算法谜题 中文版

    《算法谜题》是一本经典算法谜题的合集。书中包括了一些古已有之的谜题,数学和计算机科学有一部分知识就发源于此。 《算法谜题》可以为对算法感兴趣的广大读者提供系统丰富而实用的资料,能够帮助读者提升高阶算法...

    Algorithmic puzzles(算法谜题).pdf

    - 第二部分为主要内容,分为三个难度级别的谜题集合:较易谜题(第 1 至 50 题)、中等难度谜题(第 51 至 110 题)以及较难谜题(第 111 至 150 题)。 - 第三部分提供了所有谜题的提示,帮助读者理解解题思路。 ...

    很经典的java谜题

    "很经典的Java谜题"这个压缩包文件中的"Java谜题.chm"很可能包含了各种关于Java语言的巧妙问题和解决方法,这些都是深入理解和提升Java技能的好材料。 首先,Java谜题可能涵盖以下几个方面: 1. **类型转换**:...

    Java谜题

    "Java谜题"通常指的是那些涉及到Java语言特性和编程技巧的问题,这些问题可能需要深入理解Java的语法、类库或者运行机制才能解答。这类谜题旨在提升开发者对Java的理解和问题解决能力。 在《Java谜题》这个主题中,...

    Python代码解决数学谜题-百钱买百鸡-问题示例

    "百钱买百鸡" 是一个经典的数学问题,旨在通过逻辑和算术找出所有可能的组合,使得购买的公鸡、母鸡和小鸡总数恰好是100只,而总价正好是100元。这个问题源于中国古代,体现了数学在实际生活中的应用,同时也是教育...

    Sudoku:此代码生成随机数独谜题或解决任何给定的数独谜题。-matlab开发

    自从我知道数独游戏以来,我... 这个 m 文件包含随机猜测方案,因此,当给它一个空的数独谜题时,它会解决它,结果,它会生成一个随机数独谜题。 之后,另一个 m 文件 Sudoku.m 被用来生成 SudokuSolver.m 的用户界面。

Global site tag (gtag.js) - Google Analytics