返回信息流最近在看《Java核心技术卷一》,重新看了一下基础部分,遇到了两个疑问:
1. 整型和单浮点型都是4个字节,为什么单浮点型可以表示的范围大那么多?
4个字节,2^32个状态,对于整型好理解,一个状态对应一个值;但是对于浮点型,一个范围内有无限个数,但是状态却是有限的,所以其实虽然可以表示的范围很广,但是其实有很多数是无法准确表示出来的,这其实就是浮点型所谓的误差?是否会出现两个很相近的数用浮点型表示的时候值是一样的?
2. char类型用UTF-16编码描述一个代码单元,但是UTF-16编码不是变长的吗,而char是固定两个字节啊?
所以其实char类型只支持Unicode中基础的一些字符是吗,很多辅助的特殊字符是无法表示的?
还有就是文件本身有个编码格式,搞得我好乱啊...
这是一条镜像帖。来源:北邮人论坛 / java / #54149同步于 2016/11/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于浮点数范围和编码的两个问题
shinian
2016/11/29镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
1. https://en.wikipedia.org/wiki/Single-precision_floating-point_format
2. 一个char有时候不能表示一个codepoint。有时候需要surrogate pair
但是surrogate pairh不就需要4个字节了吗?
【 在 nuanyangyang 的大作中提到: 】
: 1. https://en.wikipedia.org/wiki/Single-precision_floating-point_format
: 2. 一个char有时候不能表示一个codepoint。有时候需要surrogate pair
int变float,不会溢出。但是会损失精度。搞清楚为毛就行了。
utf16是2 or 4个字节,java的char占2个字节,char ch = "\ud800\udc00", 是不合法的,因为是string,不能给char,
char ch = '\ud800\udc00' 也是不合法的,因为一个char只能有两个字节