标题:是刊误,还是本来就这样?
只看楼主
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
结帖率:91.53%
已结贴  问题点数:5 回复次数:2 
是刊误,还是本来就这样?


我正在看的一本书,正在做笔记的时候,发现个问题,如上图。

笔记如下:
八进制整数常量和十六进制整数常量可以表示的最小值和最大值:
    八进制:
        int,最小值:020000000000(共12位),最大值:017777777777(共12位)
        long,最小值:01000000000000000000000L(加L共24位),最大值:0777777777777777777777L(加L共23位)?怎么少一位,还是前面多一位?不对称呢?
搜索更多相关主题的帖子: 笔记 八进制 常量 最小值 最大值 
2019-04-24 22:51
rind
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:49
专家分:368
注 册:2018-3-8
得分:5 
java里面,可以使用八进制表示一个数:以0开头就是一个八进制
int i= 32 //这是一个十进制数的表示,就是32
int i = 032//这是一个八进制数的表示,3*8+2=26
类似还有十六进制表示(0x开头),二进制表示(0b开头)

开始几个是标识,要换算成二进制的话需要先舍弃标识。然后一位相当于3位,首位要特别处理(毕竟一个八进制表示的数不好用2进制表示,区分不开)。

八进制的一位是二进制的3位,3又不是32的约数。

然后表示负数的方法是使用补码(似乎是这个说法,请查证)的方式。
所有位均为0,表示0;
第一位为0表示正数,规则同一般的二进制表示,
负数的标识的第一位为0,但对值的约定就和正数不同,是其相反数先-1,然后按位取非(~)
为什么这样,大概是因为整数的个数是奇数(0的相反数是其本身,无需再表示),然后-1然后按位取非这个运算比较快。逆运算也快。

这样设定的话,一个数和其相反数按位操作就有一些比较有意思的结果。
一个数与其相反数按位与(&)结果为正数,按位或(|)结果为负数。

因为0的特比占用,导致负数的个数比整数的个数多1


[此贴子已经被作者于2019-4-25 16:17编辑过]


仅供参考,欢迎指正
2019-04-25 15:43
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1501
专家分:6573
注 册:2010-7-5
得分:0 
回复 2楼 rind
谢谢……

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2019-04-25 18:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494401-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.692079 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved