不理解为什么定义的char不可以赋值65536 强制转换为char就可以了?都是char呀

不理解为什么定义的char不可以赋值65536 强制转换为char就可以了?都是char呀

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

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

3回答
加文斯利 2017-07-19 09:46:13

char是两个字节,对应计算机内存中16个二进制位,65535用二进制表示为11111111 11111111

如果十进制数是65536,则需要用17个二进制位才能装填下这个数字,即1 00000000 00000000 一共17位

有关题主这个问题,把65536强制类型转换为char的时候,实际上是将该数的二进制的末尾的后16位转移到了一个char空间大小的变量里,所以在ch这个变量里存放的实际上是 00000000 00000000,即ASCLL字符0

我们知道,字母a在ASCLL字符里对应的数值为97

如果你不知道,可以通过这样的语句来验证:

int a =(int) 'a';

System.out.println(a);

最后输出的值为:97

如果想验证我上面所说的内容,题主不妨输入以下语句:

char ch = (char)65536+98;

System.out.println("ch=" + ch);

最终输出的值为:b

题主可以用笔笔在纸上画一下ch这个数的二进制存储空间的内存,这样就便于理解了。

希望帮助到你。

  • 提问者 櫻絳_ #1
    理解了。意思是,65536 强制转化以后就变成了0。就像时钟当走到最大值12点的时候再加1就会回到0了。多谢答主帮助,还码了这么多字,感激涕零。
    2017-07-19 16:41:58
  • 在Eclipse显示char ch = (char)65536+98;是错误的,它仍然超出了范围。
    2017-07-19 16:42:03
  • 重新编译了以下,又显示正确了,抱歉
    2017-07-19 16:46:45
慕运维2858188 2017-07-18 23:01:57

准确来说是65536个 从 0 -65535

原野zz 2017-07-18 17:49:55

char在计算机存储是两个字节 也就是16位2进制。2的16次方是65536 (也就是从0到65535 )你如果给char赋值65536那么久超出char的范围了

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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