谜题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。
不要使用浮点数作为循环索引。
分享到:
相关推荐
Godot引擎开发:关卡设计与谜题实现_(10).交互式谜题设计.docx Godot引擎开发:关卡设计与谜题实现_(11).谜题难度设计与平衡.docx Godot引擎开发:关卡设计与谜题实现_(12).关卡与谜题的视觉表现.docx Godot...
Unity引擎开发:解谜元素与谜题设计_(10).游戏关卡设计.docx Unity引擎开发:解谜元素与谜题设计_(11).解谜游戏设计理论.docx Unity引擎开发:解谜元素与谜题设计_(12).谜题类型与设计原则.docx Unity引擎开发...
GameMaker Studio开发:关卡设计与谜题实现_(10).使用物体和实例进行谜题逻辑设计.docx GameMaker Studio开发:关卡设计与谜题实现_(11).谜题的难度曲线设计.docx GameMaker Studio开发:关卡设计与谜题实现_...
Phaser引擎开发:关卡设计与谜题实现_(10).关卡数据结构与存储.docx Phaser引擎开发:关卡设计与谜题实现_(11).动态关卡生成技术.docx Phaser引擎开发:关卡设计与谜题实现_(12).关卡布局与优化.docx Phaser...
CryEngine引擎开发:关卡设计与谜题实现_(10).谜题设计基础.docx CryEngine引擎开发:关卡设计与谜题实现_(11).谜题类型与实现方法.docx CryEngine引擎开发:关卡设计与谜题实现_(12).交互式谜题开发.docx ...
Unreal Engine开发:关卡设计与谜题实现_(10).关卡流与性能优化策略.docx Unreal Engine开发:关卡设计与谜题实现_(11).多平台发布与适配.docx Unreal Engine开发:关卡设计与谜题实现_(12).版本控制与团队...
- **谜题部分**(第2章):按照难度分级,包括了易于上手的谜题、中等难度的谜题以及较为复杂的谜题。 - **提示与解答**(第3章与第4章):为每个谜题提供了详尽的解题思路和答案,便于读者对照学习。 #### 三、...
根据提供的信息,“算法谜题.pdf”这一文档似乎包含了一些与算法相关的谜题或者挑战问题,这类资料对于学习和深入理解算法具有重要的价值。虽然提供的具体内容部分仅包含了“混混藏书阁”的链接,并未直接给出关于...
Unity引擎开发:谜题设计与逻辑_(10).谜题游戏的关卡设计.docx Unity引擎开发:谜题设计与逻辑_(11).谜题游戏的测试与优化.docx Unity引擎开发:谜题设计与逻辑_(12).谜题游戏的发布与上线准备.docx Unity引擎...
三壶谜题,广度优先遍历算法,python实现。 三壶谜题是一个经典的算法问题,通常使用广度优先遍历(BFS)算法来解决。以下是对三壶谜题及其广度优先遍历算法的详细介绍: 1. 基本概述 - 定义:三壶谜题是一个涉及...
Godot引擎开发:谜题设计与逻辑_(10).GDScript高级应用.docx Godot引擎开发:谜题设计与逻辑_(11).状态机与有限状态自动机.docx Godot引擎开发:谜题设计与逻辑_(12).谜题的测试与调试.docx Godot引擎开发:...
CryEngine引擎开发:谜题设计与逻辑_(10).物理引擎在谜题设计中的应用.docx CryEngine引擎开发:谜题设计与逻辑_(11).谜题测试与调试技巧.docx CryEngine引擎开发:谜题设计与逻辑_(12).谜题设计案例分析与...
Unreal Engine开发:谜题设计与逻辑_(10).谜题元素的交互设计.docx Unreal Engine开发:谜题设计与逻辑_(11).谜题解谜流程与逻辑优化.docx Unreal Engine开发:谜题设计与逻辑_(12).谜题故事背景与环境设定....
Java谜题1——表达式谜题 谜题1:奇数性 谜题2:找零时刻 谜题3:长整除 谜题4:初级问题 谜题5:十六进制的趣事 谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2...
- **主章节谜题**:分为三个难度等级,包括较易、中等难度和较难谜题。 - **引言谜题**:一个特别的谜题,旨在激发读者的兴趣。 - **提示部分**:提供了每个谜题的提示,帮助读者思考。 - **解答部分**:提供了每个...
算法谜题是结合了传统谜题和计算机算法知识的一种智力游戏,旨在通过谜题的求解过程训练和培养算法思维能力。 本书分为四个部分:概览、谜题、提示和答案。概览部分主要介绍算法设计的通用策略和算法分析技术。算法...
《C++与VS2019环境下的MFC应用程序:详解“四灯谜题”实现》 在IT领域,C++是一种广泛使用的编程语言,以其高效性和灵活性深受开发者喜爱。Visual Studio 2019(VS2019)作为微软推出的强大集成开发环境(IDE),为...
GameMaker Studio开发:谜题设计与逻辑_(10).碰撞检测与响应.docx GameMaker Studio开发:谜题设计与逻辑_(11).变量与属性的高级应用.docx GameMaker Studio开发:谜题设计与逻辑_(12).事件与消息传递机制....