考虑以下代码:
System.out.println('G'+2);
输出为73。我能知道为什么以及如何吗?
在Java中,a char
在UTF-16
编码中占16位。
G
的unicode是U+0047
二进制的0000 0000 0100 1111
。
当您将a char
和an int
(32位)相加时,char
将int
通过插入0
其二进制表示的开头来转换为。因此0000 0000 0100 1111
被转换为0000 0000 0000 0000 0000 0000 0100 1111
(十进制为71)。
这就是为什么你得到73
。
问题内容: 在添加时产生195。是输出数据类型还是? 问题答案: 添加Java字符,短裤或字节的结果是一个int: Java语言规范对二进制数值的促进: 如果任何一个操作数是引用类型,则执行装箱转换(第5.1.8节)。然后: 如果一个操作数的类型为double,则另一个将转换为double。 否则,如果其中一个操作数的类型为float,则另一个将转换为float。 否则,如果其中一个操作数的类型为
问题内容: 据我了解,字符是单个字符,即字母, 数字 ,标点符号,制表符,空格或类似内容。因此,当我这样做时: 输出1正是我所期望的。那为什么当我这样做时: 我最终的输出是 50 吗? 问题答案: 之所以得到它,是因为它添加了char 的ASCII值。您必须先将其转换为int。
问题内容: 我有三个简短的变量。当我将两个加在一起并将结果分配给第三个时,eclipse告诉我需要将其强制转换为short! 但是,当我先进行简单分配,然后进行增量分配时,一切都很好。 为什么是这样 ? 问题答案: JLS(第15.8.2节)说: “将二进制+运算符应用于两个数字类型的操作数时,将执行加法运算,从而得出这些操作数之和。” “对操作数执行二进制数值提升(第 5.6.2节 )。” 这意
我试图在一系列列表中添加第一个值,然后从一系列列表中添加第二个值,依此类推。 例如: 因此,我希望 180, 210,240, 270, 300 到目前为止,我的代码是:
如果和在一个平台上的表示形式相同,那么它们是严格相同的吗?根据C标准,这些类型在平台上的行为是否有任何不同? 这样做总是有效的吗: 我猜同样的问题也适用于short和int,如果它们碰巧是相同的表示。 在讨论如何为没有stdint.h的嵌入式C89编译器定义类似的typedef(即或)以及这是否重要时,出现了这个问题。
问题内容: 我有两个成员相同,我想将一个结构复制到另一个结构,请参见下面的伪代码: 然后,我有结构的,而结构的,有什么办法复制的? 问题答案: 使用转换更改类型。以下代码使用转换将type 的值复制到type 的值: 游乐场的例子 该转换仅在基础类型,除了结构标签相同的工作。