Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么循环使用字符作为';s指数循环无限大?_Java_Loops_Char - Fatal编程技术网

Java 为什么循环使用字符作为';s指数循环无限大?

Java 为什么循环使用字符作为';s指数循环无限大?,java,loops,char,Java,Loops,Char,此循环将无限期地继续: char a = 100; for(a=100; a>=0;--a) System.out.println(a); 发生这种情况是因为a在算术运算中被提升为int值,并从16位字符值扩展到32位,因此始终保持正值 没有char值是无符号的-当它们低于0时,返回到65535 用byte交换char——然后它就会工作。它确实会无限循环——你所说的原因很接近。之所以发生这种情况,是因为a不能表示任何不满足a>=0-char无符号的数字。算术下溢在Java中定义良

此循环将无限期地继续:

char a = 100;
for(a=100; a>=0;--a)
    System.out.println(a);

发生这种情况是因为a在算术运算中被提升为int值,并从16位字符值扩展到32位,因此始终保持正值

没有
char
值是无符号的-当它们低于0时,返回到65535


byte
交换
char
——然后它就会工作。

它确实会无限循环——你所说的原因很接近。之所以发生这种情况,是因为
a
不能表示任何不满足
a>=0
-
char
无符号的数字。算术下溢在Java中定义良好且未指示。请参见本规范的以下相关部分

  • 整数运算符不以任何方式指示溢出或下溢


    这意味着除了比较数值外,没有溢流/下溢的迹象。。。e、 g.如果像其他人所说的那样
    a
    ,Java中的
    char
    类型是无符号的,因此
    a>=0
    将始终为真。当
    a
    达到0并再次递减时,它变为65535。如果您只是想反常,可以这样编写循环以在101次迭代后终止:

    char a = 100;
    for(a=100; a<=100;--a)
        System.out.println(a);
    
    chara=100;
    
    对于(a=100;aIs)这真的是算术下溢吗?cf.你仍然错了。整数下溢确实发生在Java中。只是没有指出……正如你引用的JLS文本所述。也就是说,没有引发异常,也没有什么可以直接测试是否发生了下溢。@oldrinb-这只回答了问题“会的。”更有趣的问题是“为什么”。@StephenC我的评论回答了标题中的问题。“为什么”我在下面回答。@Phoenix我更新了我的回答,事实上你的回答是对的,原因…:-)斯蒂芬,你说得对。我假设它像C的字符。@NickODell那么你应该知道,纯
    char
    的符号是由实现定义的……它只能保证能够适应整个ASCII字符集(0-127),C99确保它至少可以存储8位。oldrinb,在C语言中,我总是澄清一个变量是有符号的还是无符号的,只是为了确保它在所有编译器上都能正常工作。这是必要的,即使是int之类的,还是偏执?NickODell no--
    int
    对应于
    signed int
    long
    signed long int
    ,和
    short
    signed short int
    。区别出现在
    char
    上,因为从技术上讲,普通
    char
    signed char
    unsigned char
    都是独立的数据类型。