当前位置: 首页 > 面试题库 >

从int到char和ASCII值的类型转换

葛昕
2023-03-14
问题内容
int a1 = 65535;

char ch2 = (char) a1;

System.out.println("ASCII value corresponding to 65535 after being typecasted : "+ch2);// prints?
char ch3 = 65535;
System.out.println("ASCII value corresponding to 65535 : "+ch3);// again prints?

我引用了Herbert Schildt的第3章:数据类型,变量和数组:

字符的范围是0到65535。没有负字符。标准字符集ASCII(通常称为ASCII)的范围始终为0到127,而扩展的8位字符集ISO-
Latin-1的范围为0到255。由于Java旨在允许程序在全球范围内编写使用时,将使用Unicode表示字符是有意义的。只要整数在范围内,也可以将整数分配给char。

//char ch33 = 65536; compilation-error, ofcourse since out of char range

(which is 0 - 65535)

int a11 = 65536;  
  char ch22 = (char) a11;  
System.out.println("ASCII value corresponding to 65536 after being

typecasted : “+ch22);
// non-printing character(appearance of a small square like figure in
eclipse console)

问题是:为什么这行 没有 编译错误:char ch22 = (char) a11即使char ch33 = 65536行不通?还有一件事,当int a1 = 65535服用时不是这种情况吗?


问题答案:

好的,您在那里有几个非常不同的问题。

我认为第一个问题是:

为什么会看到?当您输出ch2ch3

因为您输出的是无效字符。Java字符代表UTF-16代码点,而不是实际字符。UTF-16中的某些Unicode字符需要
两个 Java char来存储。有关Unicode FAQ的
UTF-16的更多信息,请参见。在UTF-16,这个值0xFFFF(这是你的东西ch2,并ch3包含)不是作为一个独立的值有效;
即使存在,也没有Unicode U +
FFFF字符。

输入以下内容ch22:您看到一个小方框的原因是您正在输出字符0(结果(char)655360,请参见下文),这是一个“控制字符”(所有低于32的字符-
正常空格字符-是各种控制字符)。字符0是“空”字符,我不知道它没有公认的标志符号。

为什么这样做时没有错误int a11 = 65536; char ch22 = (char) a11;

因为这就是Java
缩小的原始转换的定义方式。没有抛出任何错误;而是仅使用相关的位:

将有符号整数缩小为整数类型T会简单地丢弃除n个最低阶位以外的所有位,其中n是用于表示类型T的位的数量。除了可能丢失有关数值幅度的信息外,
,这可能导致结果值的符号与输入值的符号不同。



 类似资料:
  • 我想将char类型转换为int类型,而不丢失有符号的含义,所以我在文件int_test中编写代码。c和它的工作原理: 运行结果是: (有符号字符)a=-2,b=-2 编译日志是: gcc-o int _ test int _ test . c int _ test . c:在函数“main”中:int_test.c:9:15:警告:左移位计数 我的问题是:1.是否有简单有效的转换?2.简单地将ch

  • 问题内容: 我只想知道是否存在更好的解决方案,可以从字符串中的字符解析数字(假设我们知道索引n处的字符是数字)。 (不用说这只是一个例子) 问题答案: 尝试。 产生: 令人高兴的是,它还可以与字符串一起使用,例如and ,并且 和分别是东部阿拉伯文和北印度文/梵文的数字5。

  • 基于此阵列: 我想在Java中打印双精度值和ascii值。我在互联网上找不到合适的解决方案。我刚刚发现如何将单个字符转换为整数值。但是很多字符呢?主要问题是,我有一个大char[]和一些双精度和int值存储在.对于双精度值,它们存储在4字节大小和整数1或2字节内,所以我必须阅读所有这些并转换为双精度或整数。 谢谢你帮忙

  • 我是斯威夫特的新人,现在尽我所能地学习这个。我写了得到参数的函数:数字和函数,它们与这个数字一起工作: 但是编译给出错误。当我试图改变论点时,比如

  • 我一直在尝试编译,并玩了一圈的和数,但仍然不能弄清楚错误是什么。有什么想法吗? 标题:

  • 你好,我正在尝试创建一个程序路径并放入注册表文件中,但我一直出错。这是代码: 我得到的错误说 从“char*”到“unsigned char”[-fppermissive]的转换无效 我花了几个小时寻找解决方案,但我找不到。