byte在计算机中的存储方式--Double.byteValue()的输出结果思考
先举三个栗子:
1.
public static void main(String[] args) {
Double d = new Double(123.56);
byte b = d.byteValue();
System.out.println(b);
}
输出结果:123
2.
public static void main(String[] args) {
Double d = new Double(456.56);
byte b = d.byteValue();
System.out.println(b);
}
输出结果:-56
3.
public static void main(String[] args) {
Double d = new Double(567.56);
byte b = d.byteValue();
System.out.println(b);
}
输出结果:55
大家应该看出来了吧,这三个只是Double的整数位变化了,但输出结果却差不少,而且一眼是看不出来规律的
原因解析:1.翻源码,看看byteValue()是咋处理的
上源码:
/**
* Returns the value of this {@code Double} as a {@code byte}
* after a narrowing primitive conversion.
*
* @return the {@code double} value represented by this object
* converted to type {@code byte}
* @jls 5.1.3 Narrowing Primitive Conversions
* @since JDK1.1
*/
public byte byteValue() {
return (byte)value;
}
惊不惊喜!意不意外!没错,就是强转了
2.Double强转byte时的操作过程
记住这句话:正整数在计算机中用原码来表示的,而负整数在计算机中用补码来表示的
1 取整
2 整数部分与[256]取模
3.1 如果该整数在[-128,127]之间,直接打印
3.2 如果该整数在[-128,127]之外,将这个值化为二进制,判断第一位是1还是0
3.2.1 如果是1,表明该数为一个负数
3.2.2 如果是0,表明该数为一个正数
好了,概念说完了,回头理解一下最开始举的栗子
先说第一个:
123.45 --> 取整 123 --> 整数部分与[256]取模 123 --> 在[-128,127]区间内 --> 打印输出
第一个最简单了,很容易理解,接下来讲第三个
注意啊,是第三个(因为第二个比较难,放在最后讲)
567.56 --> 取整 567 --> 整数部分与[256]取模 55 --> 在[-128,127]区间内 --> 打印输出
看,其实第一个和第三个是同样原理,接下来分析第二个
456.56 --> 取整 456 --> 整数部分与[256]取模 200 --> 在[-128,127]区间外
在区间外,所以我们将 200 转为二进制来看

200二进制为 1100 1000
第一位为1,也就是说这个数是个负数,还记得上面标粗体的让记住的那就话了么
记住这句话:正整数在计算机中用原码来表示的,而负整数在计算机中用补码来表示的
所以,这个 1100 1000 其实存的是一个补码,我们根据补码算出原码
计算法则:
补码的补码就是原码
二、负整数的符号位固定为1,由原码变为补码时,规则如下:
1、原码符号位1不变,整数的每一位二进制数位求反,得到反码
1011 0111
2、反码符号位1不变,反码数值位最低位加1,得到补码
1011 1000
根据此数求出十进制的值
1*2^3 + 1*2^4 + 1*2^5 = 8 + 16 + 32 = 56
由于第一位为1,结果为负,即 -56
Double如果是负数也同样适用
声明:本文中未加粗的斜体摘自百度经验,其他原创手打,如需转载,请联系我本人
byte在计算机中的存储方式--Double.byteValue()的输出结果思考的更多相关文章
- java 20 - 8 字节流的文件复制以及汉字在计算机中的存储方式
复制文本文件:把当前目录下的FileIntputStream.java文件里面的内容复制到当前目录的b.txt文件中 分析: 数据源: FileIntputStream.java -- 读取数据 -- ...
- C语言中浮点数在内存中的存储方式
关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4. ...
- <转载>浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...
- QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用
FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...
- Float在内存中的存储方式及IEC61131处理
Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...
- YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法
上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...
- float和double在内存中的存储方式
本文转载于:http://wenku.baidu.com/link?url=ARfMiXVHCwCZJcqfA1gfeVkMOj9RkLlR9fIexbgs9gDdV8rIS48A1_xe1y6YgX ...
- C语言 float、double数据在内存中的存储方式
float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...
- C/C++浮点数在内存中的存储方式
一.内存表示 任何数据在内存中都是以二进制的形式存储的,浮点数的表示是把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,数的小数点位置随比例因子的不同而在一定范围内自由浮动.如下图是3 ...
随机推荐
- C++实验指导
选择 Build > Set Active Configuration 菜单,在对话框中选择 Win32 Debug. 当程序调试成功后,一般将其生成发布版,这样可使运行程序优化,方法是在上述对 ...
- 叮咚recovery——想刷什么包就刷什么包
我手机vivo s11t,我之前试过刷机,刷过很多包,发现只有官网下载的相同版本的固件包可以成功刷入,其他的任何的包都不行,我弟弟的手机vivo x3L,遇见和我一样的情况,他想刷小米的MIUI,开始 ...
- WordPress二级菜单设置
关于二级菜单的设置,首先建立几个自己的分类目录,然后打开菜单设置界面,用鼠标自由拖动即可.注意,这里说的一级菜单和二级菜单都是分类目录,所 以我们写文章的时候应该同时选择一级菜单和二级菜单两个分类目录 ...
- iOS 组件化的几篇文章
随着工程的成长,开发人员的增多,合理的模块划分及低耦合的重要性显得愈发重要.最近在思考这方面的问题,也读了不少通过组件化解耦的文章,这里记录一下. 前 5 篇文章有些关联,建议阅读顺序,1.3.2.4 ...
- 使用kafka connect,将数据批量写到hdfs完整过程
版权声明:本文为博主原创文章,未经博主允许不得转载 本文是基于hadoop 2.7.1,以及kafka 0.11.0.0.kafka-connect是以单节点模式运行,即standalone. 首先, ...
- java中一个引人深思的匿名内部类
前两天去面试javaweb问到一个问题,在你的项目中有没有用到线程,我特么的一想,这东西不是在c层面的吗,所以说我不了解线程..... 后来回去想啊想啊,我操这特么的不是再问我事物的控制,消息队列的回 ...
- thinkphp3.2-更改控制器名后找不到相应的表?报1146的错
用tp在做着自己的小系统的时候,明明在刚才还是能好好地查到表的,在Service用了'D'方法连自己数据库的表,只是更改了自己的控制器名,却报错了... 我就纳闷了,虽然我的控制器和Service用的 ...
- MYSQL数据库学习十八 数据库维护和性能提高
18.1 数据备份 可能造成数据损失的原因有: 存储介质故障:保存数据库文件的磁盘设备损坏,用户没有数据库备份导致数据彻底丢失. 用户的错误操作:如误删了某些重要数据,甚至整个数据库. 服务器的彻底瘫 ...
- centos文件系统变为只读的解决处理
简单粗暴:重启 Linux系统重启或无故变为只读造成网站无法正常访问的简单临时的做法: 一. 1.mount: 用于查看哪个模块输入只读,一般显示为: /dev/hda1 on / type ext3 ...
- (Matlab)GPU计算所需的配置
电脑:联想扬天 M4400 系统:win 7 X64 硬件:NVIDIA GeForce GT 740M 独显2G 硬件驱动: 软件: Matlab 2015a %需要安装 Paralle ...