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,一经查实,立即删除!

相关文章

爆笑:可怜的话剧演员

地点:中央戏剧学院的话剧排练场。   事件:一场文艺剧目的排练。   人物:一男一女。   女(羞涩的):我看啊,咱俩的婚事儿,都是你妈逼的。   男(憨笑著&#xff0…

获取文本中你须要的字段的 几个命令 grep awk cut tr sed

1,grep 2,awk 3,cut 4,tr 5,sed 实例1 获取本地IP地址 /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6 | awk {print $2} | tr -d "addr:" 实例2 sed 的使用。去掉某字段 前后的值 grep "select" slow.log | grep "from" | s…

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

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

[补档]暑假集训D5总结

%dalao 今天又有dalao来讲课,讲的是网络流网络流——从入门到放弃:7-29dalao讲课笔记——https://hzoi-mafia.github.io/2017/07/29/27/果然是从入门到放弃啊,dalao本来说好下午继续讲完的,然后——就没有然后了重要的是&#xff…

在多线程中使用UDP

在多线程中使用UDP来自:painboy, 时间:2004-8-8 11:34:40, ID:2754268 type TUdpThread class(TThread) private FData : PChar; //数据区 FBytes : Integer; //数据区大小 FFromIP : string; //UDP的…

主流浏览器Cssjs hack写法

参考: BROWSER HACKS 主流浏览器的Hack写法 转载于:https://www.cnblogs.com/huangtailang/p/7279634.html

java管道流文件的复制_JavaIO 总结笔记三 基本字节字符输入输出流和文件复制...

一、IO体系1.流主要分两大类:字节流 字符流2.在硬盘上的文件,都是以二进制字节形式存储的,所以不管啥文件,读写时都应该用字节流3.在java的早期版本中,的确只有字节流,没有字符流4.一个数字或字母占1个字节…

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…

hadoop入门小知识点

注意各个主机之间的通信 文件的复制 scp指令 scp /etc/profile acm03:/etc 所有历史版本: archive.apache.org hdfs://acm01:9000 hdfs是个协议 然后 访问谁 哪个端口 统一资源定位符URL 客户端统统 找nameinode 访问它 启动 datanode hadoop-dae…

java关键字整理_【java基础知识整理】java基础语法之关键字

一、continue与breakcontinue与break基本都使用与循环中,但是continue指结束所有循环的当前循环,而break是指结束整个循环。下面用代码进行简单实例。使用continue结束当前循环this:this关键字只能在方法内部使用,表示对“调用方法…

快速查询DB Lock的方法

DBCC Opentran DBCC inputBuffer(id) KILL (id) sp_lock --找出產生Lock的源頭--Find locked processselect open_tran,* from sys.sysprocesses where blocked>0 --Find suspected processselect * from sys.sysprocesses where statussleeping and waittype0x0000 and ope…

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"…

python3.7.1使用_使用python3和pytorch1.7.1运行dface

0 准备工作运行环境&#xff1a;Alienware GTX1070Ubuntu 18.04cuda 10.1创建虚拟环境&#xff1a;conda create -n py37_dface python3.7conda activate py37_dfacepip install torch1.7.1cu101 torchvision0.8.2cu101 torchaudio0.7.2 -f https://download.pytorch.org/whl/t…

新书预告

新书预告依2009年版考试大纲 重编的《网络工程师考试考前冲刺预测卷及考点解析&#xff08;第2版&#xff0c;含2008年下半年试题解析&#xff09;》、《软件设计师考试考前冲刺预测卷及考点解析&#xff08;第2版&#xff09;》&#xff0c;试题更新率可达80%以上&#xff0c;…

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…

Java中JFrame怎样控制闪烁_在JFrame Java中闪烁

大家好,我正在做一个线程来更新JFrame上的球,所以我重新绘制屏幕…然后将球更新到它的位置……然后再次绘制屏幕……画出球和同样的周期……这是代码private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {Thread t new Thread(){public void run(){while(t…

基于Linux的虚拟主机搭建

为了建设二级网站建设&#xff0c;我考察了多个开源和商业的虚拟主机和控制面板。主要察看了Linux下的。很多工具&#xff0c;例如开源的VHCS&#xff0c;商业的Plesk功能虽然十分强大&#xff0c;但他们的主要服务对象是商业虚拟主机客户&#xff0c;和我们的集中管理模式不太…