关于java字符范围的一点问题?

关于java字符范围的一点问题?

之前学过c语言的字符表示范围是-128-127,java是0-65536是否意味着java取消了sign,unsign,采用的不再是ascii编码了?

另外,

public class CharacterDemo {
 public static void main(String[] args){
        char c1=(char)65536;
	System.out.println("c1是"+c1);
	
}

上面这个代码,既然java的字符范围是0-65535那么

为什么强制类型转换依然是加前缀char就可以输出大雨65535的字符?

强制类型转换char后输出65535之后的数字结果还是字符吗?eclipse上面输出来一片空白什么都没有?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
提问者 Geek宝贝 2017-09-26 09:20:39

明白了,也就是说虽然java中虽然没有了sign和unsign但是计算机基础阶段还是按照最基础的011111111-111111111储存,首0代表负数,首1代表正数,如果char类型一旦内存溢出,11111111二进制进位变成01111111就变成负数,即使输入的数无限大,在java中永远在0-65535之间无限循环,是这个意思吧?

好帮手慕珊 2017-09-23 22:51:15

你好!Java中没有sign和unsign的内容,但是java中也不是都是正整数,整型数据类型是可以表示负数的。另外,在java中char类型不只表示ASCII码也可以表示Unicode编码

int类型强制转换为char类型,65536超过了char类型的范围,java会经过一系列操作将其转换为char类型,eclipse输出空白是因为这个字符刚好不是能显示的字符。

此时的强制类型转换并不是输出了大于65535的字符,而是经过处理变成了一个0-65535之间的字符了。

祝学习愉快!

  • 提问者 Geek宝贝 #1
    明白了,也就是说虽然java中虽然没有了sign和unsign但是计算机基础阶段还是按照最基础的011111111-111111111储存,首0代表负数,首1代表正数,如果char类型一旦内存溢出,11111111二进制进位变成01111111就变成负数,即使输入的数无限大,在java中永远在0-65535之间无限循环,是这个意思吧?
    2017-09-26 09:21:25
  • 一叶知秋519 回复 提问者 Geek宝贝 #2
    是的,你的理解是对的。祝学习愉快~
    2017-09-26 14:20:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师