原码补码反码——复习
2017-06-28 15:15
375 查看
基本概念
原码指二进制数据,常见文件中的010101010…..
原码:可直观反映出数据的大小。
反码
在原码的基础上:符号位不变,其他位取反
补码
在反码的基础上符号位不变,和1做加法
说明: 原码 一般是机器码(同样的原码,在有符号和无符号时表示的10进制数不一样)
原:00101011 反码:01010100 补码:0 1010101
*
byte 转 成int 类型翻译的值 是改byte字节的对应的补码
*
byte 原码是:1111-1111 对应的反码:1000-0000 对应的补码:1000 0001 补码对应的10进制值(也就是int值)是-1
Java中的体现
数值一般用补码表示1 int = 4 byte
int -> byte ->int
byte b = 0; // 16 进制 ff = 10 进制255 for ( int i = 0; i <= 0xff; ++i ) { b = (byte)i;// 去int的最低4位 System.out.print(" "+i+":"+b+", "); }
为什么会出现 179:-77 这样的结果?
int 类型的 179 对应的原码是:[00000000..00000]10110011
转换成 byte 类型对应的原码是:10110011
将 byte转成int 类型的时候需要先将byte 换算成相应的数值,这里需要求其补码: [11001100]反 ,[11001101]补码
11001101 这个补码对应的有符号值是 - 77 这也是为什么会是这个结果
将正数425 进行int -> byte->int转换,结果是-87
// b = (byte) 425; // 1 1010 1001(u 169) 原码 // 反:1101 0110 补:11010111 // System.out.println("byte"+b); //(-87)1101 0111
Java 中读取二进制文件遇到的问题
字节byte为 1111 1111 在转为Int 类型的时候值会变成 -111111111 11111111 11111111 11111111 (=0xFF)
00000000 00000000 00000000 11111111 (byte)
&
0xff
InputStreamReader.java public synchronized int read() throws IOException { if (pos >= count) { fill(); if (pos >= count) return -1; } return getBufIfOpen()[pos++] & 0xff; }
相关文章推荐
- 关于原码, 反码, 补码的复习
- 复习一下原码,反码,补码
- Guava ImmutableSet.Builder源码分析,移位原码补码反码复习
- 原码,反码和补码(复习)
- int、short、char 类型超出范围赋值__说说原码,反码,补码
- 原码,反码,补码,详解,老少皆宜
- 原码、反码、补码,移码表示法
- 原码 反码 补码 移码
- C语言-数据类型(原码、反码、补码)
- 关于 补码 原码 反码
- day-02 原码、反码、补码详解
- 原码, 反码, 补码 详解
- 原码、反码、补码以及为什么要用反码和补码
- 原码、补码、反码
- 原码 反码 补码
- 关于汇编中的NEG指令正解!(补码,反码,原码)现实意义
- 原码, 反码, 补码 详解
- 第二章 变量和基本类型——2.1 基本内置类型((转)附录之原码、反码和补码及其背后的数学之美)
- 原码 反码 补码
- 原码、反码、补码和移码其实很简单