java 负数存储结构_负数在java中的存储和读取过程 | 学步园

问题描述:

将-5存储在文本文件中,再读取出来显示到控制台;

预备知识:

1.在java中使用补码处理数字,而且byte(8)的数字在扩展成int(32)类型的时候,正数填充0,负数填充1;

2.负数的转变过程

2071898.html

000f3242b28afbad2eb69a497ec6b4c0.png

2071898.html正数的原码,反码,补码,都一样;

解决步骤:

1.  -5(5)在byte类型中的表示是1000 0011(0000 0011) 当它扩展成int的时候会变成 11111111 11111111 11111111 11111011(00000000 00000000 00000000  00000011);

2.

byte binaryInt = -5;

Path path = Paths.get("..");

try {

OutputStream out = new BufferedOutputStream(Files.newOutputStream(path,

CREATE));

out.write(binaryInt);

out.flush();

out.close();

BufferedInputStream input = new BufferedInputStream(Files.newInputStream(path));

int i= input.read();

input.close();

System.out.println(i);

} catch (IOException ex) {

}

输出为 251

3.原因

第一步是看写入操作

jdk BufferedOutputStream write()源码

public synchronized void write(int b) throws IOException {

if (count >= buf.length) {

flushBuffer();

}

buf[count++] = (byte)b;

}

在写入操作的时候只是把11111111 11111111 11111111 11111011的后8位写入了文件中,这也就解释了文件中为什么是0xFB

2071898.html

2071898.html的原因了;

然后是读取操作

jdk InputStream read() 源码

public synchronized int read() throws IOException {

if (pos >= count) {

fill();

if (pos >= count)

return -1;

}

return getBufIfOpen()[pos++] & 0xff;

}

java中位运算会先将参与运算的数据类型转换成int,

2071898.html

证明了这一点;所以getBufIfOpen()[pos++]扩展成int数据类型时候是11111111 11111111 11111111 11111011,getBufIfOpen()[pos++] & 0xff就变成了11111111 11111111 11111111 11111011&00000000 00000000 00000000 11111111最后是251;

4.解决办法

int i= input.read()-256;就可以得到原值了;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一升的眼泪 日记原文+剧照

作者 木藤亚也14岁——我的家人  “我不能活动,可是我想活着……”   然而,我怎么也想不到,就在我生日这一天,却发生了一场悲剧——玛丽被邻居家养的大狗“老虎”咬破头,死了。玛丽虽然身体小小的&#x…

mysql+phpmyadmin配置流程

mysqlphpmyadmin配置流程:环境:Apachephp5mysql5下载包:phpMyAdmin-2.11.9.4-all-languages-utf-8-only.tar.gz不能下就到这里下载 [url]http://www.phpmyadmin.net/home_page/downloads.php[/url]一:安装配置1> 安装包&#x…

form表单多文件上传

1.html/jsp主页 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"…

JS学习记录(BOM部分)

BOOM部分 Screen <html lang"en"> <head><meta charset"UTF-8"><title>Screen</title> </head> <body></body> <script>console.log(screen.width);console.log(screen.height);console.log(screen…

在linux上安装jdk(转载)

软件环境&#xff1a; 虚拟机&#xff1a;VMware Workstation 10 操作系统&#xff1a;Ubuntu-12.04-desktop-amd64 JAVA版本&#xff1a;jdk-7u55-linux-x64 软件下载地址&#xff1a; JDK&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html &a…

WebService大讲堂之Axis2(1):用POJO实现0配置的WebService

Axis2是一套崭新的WebService引擎&#xff0c;该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2&#xff0c;还集成了非常流行的REST WebService&#xff0c;同时还支持Spring、JSON等技术。这些都将在后面的系列教程中讲解。在本文中主要介绍了如何使用Axis2开…

Unity中UGUI之Canvas属性解读版本二

Canvas Render Modes(渲染模式) 1.在screen空间中渲染2.在world空间中渲染 Screen Space-Overlay 在这个渲染模式中&#xff0c;UI元素将在场景的上面。如果场景改变大小或改变分辨率&#xff0c;Canvas将自动改变大小去适配。 Screen Space-Camera 这和Screen Space-Overlay类…

用subline添加单引号和逗号,在sql中使用

subline Sublime编辑器批量在行首或者行尾添加字符串的方法&#xff1a; 1、选中要操作的行&#xff0c;全选就按CtrlA&#xff1b; 2、使用快捷键CtrlShiftL&#xff0c;进入待操作状态&#xff1b; 3、使用左右方向键&#xff08;←或者→&#xff09;&#xff0c;批量操作…

[独库骑行之我们路过沙漠]塔克拉玛干的边缘

塔克拉玛干的边缘 在计划这段旅行时我最憧憬的路段就是横穿塔克拉玛干的沙漠公路&#xff0c;缘于影视里的茫茫大漠上金色的胡杨林的印象。 由于时间关系&#xff0c;我们没有走那条沙漠公路。倒是从沙雅到阿拉尔之间有部分沙漠公路&#xff0c;但完全没有这种诗情画意&#xf…

Java中Set为什么不能存放重复值

set三个子类的底层其实都是Map的。我们也知道Map是key-value键值对出现的。我们也知道&#xff0c;set添加方法是set.add(“1”)。参数只有一个&#xff0c;不是键值对的&#xff0c;那么底层Map怎么存储的呢&#xff1f; TreeSet的构造方法 从源码中&#xff0c;我们可以看到&…

golang和php哪个性能更强,相同逻辑的php与golang代码效率对比,最好语言落谁家…...

业务逻辑&#xff1a;逐行读取一个3.6MB的文件&#xff0c;把每行的字符串切割成数组&#xff0c;计算二维数组中的经纬度值与目标地点的经纬度的距离&#xff0c;符合限定距离范围的结果存入map中&#xff0c;将结果覆盖写入一个新的文件&#xff0c;计算程序执行的时间。$sti…

隐藏与禁用硬盘分区——利用工具或注册表

工具 以下链接任选其一&#xff1a; https://pan.abn.cc/weiyun/down.php?uf0bff31fd54bf15131d543dc75fd5f7d.undefined.exehttps://share.weiyun.com/f0bff31fd54bf15131d543dc75fd5f7d提示&#xff1a; 设置过后&#xff0c;刷新生效&#xff1b;如需恢复&#xff0c;勾去后…

走近Flex组件系列(三):按扭组件(Button,CheckBox,LinkBar,LinkButton,PopUpButton,RadioButton,ToggleButtonBar)...

本文主要介绍Flex的Button、ButtonBar、CheckBox、LinkBar、LinkButton、PopUpButton、RadioButton、RadioButtonGroup和ToggleButtonBar组件&#xff0c;这些组件是非常基础的组件&#xff0c;如果你是学习过Flex组件的可以飘过&#xff0c;本文主要是针对Flex组件的初学者&am…