标签:java 进制 -- 补码 int 127 128 反码 原码
package com.yl.pdfdemo.day01;
/**
* @Author wfj
* @Date 2021/1/9
* @Description 进制之间的转换
* @Version 1.0
*/
public class BinaryTest {
public static void main(String[] args) {
/**
* 所有数字在计算机底层都是以二进制存在的
* 对于整数,有四种表示方式
* 二进制(binary) 0,1 满2进1,以0b或者0B开头
* 十进制(decimal) 0-9 满10进1
* 八进制(octal)0-7 满8进1,以数字0开头
* 十六进制(hex) 0-9及A-F,不分大小写,满16进1,以0x或者0X开头表示,
* 如 0X21AF + 1 = 0X21B0
*/
int num1 = 0b110;
int num2 = 110;
int num3 = 0127;
int num4 = 0X110A;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
/**
* 原码,反码和补码
* 计算机底层区分正数和负数是以最高位即符号位来区分的,0开始代表正数,1开头代表负数
* 注意:计算机底层都是以补码的方式来存储数据的!!!!!
* 正数,原码,反码和补码都是一样的 比如(14) 00001110原码反码和补码都是这个
* 负数
* (-14)的原码为 10001110
* (-14)的反码 11110001
* (-14)的补码 11110010
* 反码,在原码的基础上,符号位不变,其他位取反
* 补码,在反码的基础上+1
* 给负数的补码,反推原码
*
* 10111011 -69的补码,怎么求原码
* 首先-1
* 10111010 -69的反码
* 再按位取反
* 11000101 -69的原码
*
* 例子
* byte b = (byte)(1 + 127) //结果为-128
* 为什么是-128呢,首先,java里常量的默认类型为int,所以1和127都是int类型
* 所以这里1和127都是4个字节,byte是1个字节
* 127+1 = 128
* int类型结果为00000000 00000000 00000000 10000000
* 强转为byte时,去掉的前面的3个字节为10000000就变成了-128
*
* 11111111 -127的原码
* 10000000 -127的反码
* 10000001 -127的补码
* -1即为128的补码
* 10000000 -128的补码
*/
byte b = (byte)(1 + 127);
System.out.println(b);
/**
* 1. 2进制转为10进制
* 00000011
* 转为10进制结果为3
* 计算公式为 2的0次方+2的1次方
*
* 2. 10进制转为2进制
* 计算公式:除2取余数的逆
* 13
* 13 / 2 = 6...1
* 6 / 2 = 3...0
* 3 / 2 = 1...1
* 1 / 2 = 0...1
* 补完0即为10110000
* 取逆为00001101
*/
}
}
标签:java,进制,--,补码,int,127,128,反码,原码 来源: https://blog.csdn.net/weixin_41359273/article/details/112391812
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。