rgh*_*ome 4 java unsigned char
Javachar是一种 16 位数据类型,但是在对其执行算术时它是有符号的还是无符号的?
您可以将其用作算术中的无符号 16 位整数吗?
例如,下面的说法正确吗?
char c1;
char c2;
int i = c1 << 16 | c2;
Run Code Online (Sandbox Code Playgroud)
或者是否有必要先从 c2 中去除符号扩展位?
(我确信这个问题的答案在其他地方,但似乎没有通过明显的搜索找到)。
char是未签名的。来自JLS\xc2\xa74.2.1:
\n\n对于char,从\'\\u0000\'到\'\\uffff\'(含),即从0到65535
\n
...但请注意,当您对它们使用任何各种数学运算(包括按位运算和移位运算)时,它们会根据另一个操作数的类型扩展到另一种类型,并且其他类型很可能是签:
\n\n\n\n
\n- \n
加宽基元转换 ( \xc2\xa75.1.2 ) 用于按照以下规则指定转换一个或两个操作数:
\n\n
\n- \n
如果其中一个操作数的类型为
\ndouble,则另一个将转换为double。- \n
否则,如果任一操作数的类型为
\nfloat,则另一个操作数将转换为float。- \n
否则,如果任一操作数的类型为
\nlong,则另一个操作数将转换为long。- \n
否则,两个操作数都将转换为类型
\nint。
例如,char + char是int,所以:
public class Example {\n public static void main(String[] args) {\n char a = 1;\n char b = 2;\n\n char c = a + b; // error: incompatible types: possible lossy conversion from int to char\n System.out.println(c);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n关于位扩展,如果我们按照上面的链接来扩大原始转换:
\n\n\n\n
chara到整型 T的加宽转换会对 char 值的表示进行零扩展以填充更宽的格式。
所以char0xFFFF 变成int0x0000FFFF,而不是 0xFFFFFFFF。
| 归档时间: |
|
| 查看次数: |
2758 次 |
| 最近记录: |