1、整数转化为二进制补码。

public String intToBinary(String numStr) {//判断符号boolean isNeg = numStr.charAt(0) == '-';//去掉符号位if(isNeg) numStr = numStr.substring(1);int num = parseInt(numStr);StringBuffer binStr = new StringBuffer();while(binStr.length() != 32){binStr.append(num % 2);num /= 2;}//如果是负数,进行取反加一,此处运用简便方法:从右数第一个‘1’开始,其前每一位取反//注意此处得到的binStr是反的if(isNeg){int lastIdx = binStr.indexOf("1");for(int i = lastIdx + 1; i < binStr.length(); i++){if(binStr.charAt(i) == '0') binStr.setCharAt(i,'1');else binStr.setCharAt(i,'0');}}return binStr.reverse().toString();}

2、二进制补码转化为整数。

public String binaryToInt(String binStr) {StringBuffer buffer = new StringBuffer(binStr);//判断符号boolean isNeg = buffer.charAt(0) == '1';//若是负数,先进行转化//此处同样运用简便方法int index = buffer.lastIndexOf("1");if(isNeg)for(int i = 1; i < index; ++i){if(buffer.charAt(i) == '0') buffer.setCharAt(i,'1');else buffer.setCharAt(i,'0');}int sum = 0;for(int i = 1; i < buffer.length(); i++) {sum += (buffer.charAt(i) - '0') * Math.pow(2, buffer.length() - 1 - i);}if(isNeg) sum = -1 * sum;return (sum+"");}

3、NBCD码转化为整数

public String NBCDToDecimal(String NBCDStr) {//将符号位取出,“1100”为正,“1101”为负String sign = NBCDStr.substring(0,4);int sum = 0;for(int i = 4; i < NBCDStr.length() ; i += 4){String subStr = NBCDStr.substring(i,i+4);sum = sum * 10 + Integer.parseInt(binaryToInt(subStr,4));}return (sign.equals("1100") ? sum + "" : "-" + sum);}
public String binaryToInt(String binStr, int bits)
{//bits 为binStr的位数//将binStr转化为无符号整数int sum = 0;for(int i = 0; i < binStr.length(); i++){sum += (binStr.charAt(i) - '0') * Math.pow(2,bits - 1 - i);}return (sum+"");
}

4、整数转化为NBCD码

public String decimalToNBCD(String decimalStr) {//TODO:StringBuffer binStr = new StringBuffer();//判断正负if(decimalStr.charAt(0) == '-') {binStr.append("1101");decimalStr = decimalStr.substring(1);}else binStr.append("1100");//如果位数不够,补'0'for(int j = 0; j < 7 - decimalStr.length(); j++) binStr.append("0000");//计算for(int i = 0; i < decimalStr.length(); i++){binStr.append(intToBinary(decimalStr.substring(i,i+1),4));}return binStr.toString();}
public StringBuffer intToBinary(String numStr, int bits){//bits为要转化的二进制数的位数//功能为将某个整数转化为指定位数的二进制码int num = Integer.parseInt(numStr);StringBuffer binStr = new StringBuffer();while(binStr.length() != bits){binStr.append(num % 2);num /= 2;}return binStr.reverse();}

5、浮点数转化为二进制数

public String floatToBinary(String floatStr) {float num = Float.parseFloat(floatStr);//为零if(num == 0.0) return "00000000000000000000000000000000";else if(num == -0.0) return "10000000000000000000000000000000";//无穷else if(num >= Math.pow(2,128)) return "+Inf";else if(num <= -1 * Math.pow(2,128)) return "-Inf";StringBuffer res = new StringBuffer();//符号位if(num < 0.0) res.append('1');else res.append('0');num = Math.abs(num);//非规格化数if(num > 0.0 && num < Math.pow(2,-126)){res.append("00000000");//得到0.bbbb...形式的小数num *= Math.pow(2,126);res.append(signToBinary(num));//补‘0’while(res.length() < 32) res.append("0");return res.toString();}//规格化数for(int i = -126; i <= 127; i++){if(num >= Math.pow(2,i) && num < Math.pow(2,i+1)){//i+127: 127为偏置常数res.append(intToBinary((i+127)+"",8));//得到1.bbbbb...形式的小数num *= Math.pow(2,-1 * i);res.append(signToBinary(num - 1));//位数小于32,补零while(res.length() < 32) res.append("0");return res.toString();}}return "";}
public String signToBinary(float num){//函数功能为将小数转化为二进制数StringBuffer res = new StringBuffer();while(num != 0.0){num *= 2;if(num >= 1){res.append('1');num -= 1;}else res.append('0');}return res.toString();}
public StringBuffer intToBinary(String numStr, int bits){int num = Integer.parseInt(numStr);StringBuffer binStr = new StringBuffer();while(binStr.length() != bits){binStr.append(num % 2);num /= 2;}return binStr.reverse();}

6、二进制数转化为浮点数

public String binaryToFloat(String binStr) {//取出相应部分:符号位,阶码,小数char sign = binStr.charAt(0);String order = binStr.substring(1,9);String significant = binStr.substring(9);StringBuffer res = new StringBuffer(sign == '0' ? "" : "-");//阶码int trueOrderNum = 0;int OrderNum = Integer.parseInt(binaryToInt(order,8));//非规格化数if(OrderNum == 0) trueOrderNum = -126;//规格化数else if(OrderNum != 255) trueOrderNum = OrderNum - 127;//小数部分float num = binToSignificant(significant);//无穷if(num == 0 && OrderNum == 255) return (sign == '1') ? "-Inf" : "+Inf";//非数else if(num != 0 && OrderNum == 255)  return "NaN";//非规格化数隐藏位为0,规格化数隐藏位为1else if(OrderNum != 0) num += 1;res.append(num * Math.pow(2,trueOrderNum));return res.toString();}
public float binToSignificant(String binStr){//二进制码转小数float res = 0;for(int i = 0; i < binStr.length(); i++) {res += (binStr.charAt(i) - '0') / Math.pow(2,(i+1));}return res;}
public String binaryToInt(String binStr, int bits){int sum = 0;for(int i = 0; i < binStr.length(); i++){sum += (binStr.charAt(i) - '0') * Math.pow(2,bits - 1 - i);}return (sum+"");}

计组(COA) Programming1: 整数和二进制补码、整数和NBCD码、浮点数(float)和二进制码(IEEE 754)的相互转换。相关推荐

  1. 二进制补码为什么是原码取反加一

    二进制补码为什么是原码取反加一 一.二进制和原码的定义 二进制 原码 二.反码和补码的形式 反码 补码 三.补码为什么是原码取反加一 补码的出现 补码的原理 反码的确定 四.总结 强调: 一.二进制和 ...

  2. 二进制补码记数法和余码记数法

    目前,计算机表示整数普遍采用的就是二进制补码记数法.它是用固定数目的二进制位来表示整数,通常是32位.如1表示成 00000000 00000000 00000000 00000001 但这里,为了方 ...

  3. 计算机二进制补码为什么是原码取反加一

    为什么需要补码 在真实世界里,常常需要负数.如果存储在存储设备中的最小值为0,那么计算机如何存储负数呢?这个问题不是存储问题,而是程序设计人员的解释问题,类似这样的问题在后边的存储设备中也存在( 关注 ...

  4. 计算二进制补码 计蒜客 Python

    题目 题目来源于计蒜客输出二进制补码 题目描述 蒜头君有一个 int 的整数,输出它的 32 位二进制补码. 输入格式 一个整型整数. 输出格式 输出一行,即该整数的补码表示. 样例输入 7 样例输出 ...

  5. 计组—原码、补码、反码、移码复习

    进制之间的转换(略) unsigned integer (无符号整数) 1. 8位二进制数表示的范围:2^8-1 (减1位二进制的减法运算) 解析:8位二进制数所表示的范围为:00000000 ~ 1 ...

  6. 剑指 Offer 65. 不用加减乘除做加法(位运算,计组原理:补码、加法器)

    一.基础知识 做这题需要用到计算机组成原理的基础知识:二进制的表示以及加法器. 简要提下知识点,最好再去研究下来龙去脉,加深理解. (1)二进制加法 a b 非进位和s 进位c 0 0 0 0 0 1 ...

  7. 计蒜客T1182 输出二进制补码(python3.6)

    题目描述 题目链接:https://nanti.jisuanke.com/t/T1182 蒜头君有一个 int 的整数,输出它的 32 位二进制补码. 输入格式 一个整型整数. 输出格式 输出一行,即 ...

  8. 整数二进制补码的数学原理(two's complement)

    转载自整数二进制补码的数学原理(two's complement) ================================================================== ...

  9. 计组——定点数原码反码补码移码以及它们之间的转换

    原码 用尾数表示真值的绝对值,符号位"0/1"对应"正/负" 若机器字长n+1位,原码整数的表示范围:−(2n−1)≤x≤2n−1{\color{Red} -( ...

最新文章

  1. Open3d 学习计划—13(Azure Kinect)
  2. 通过组策略找回“网上邻居”
  3. 回溯python_用Python回溯算法
  4. Selenium基础知识
  5. u盘装系统学计算机好,教你如何使用u盘做系统
  6. “出道” 5 年采用率达 78%,Kubernetes 为何如此成功?
  7. C++--第15课 - 惊艳的继承
  8. linux软件版本管理命令update-alternatives使用详解
  9. 微信内置浏览器提示【可在浏览器打开此网页下载文件】
  10. 前端学习之百叶窗效果
  11. window10系统ie设置代理,保存不了的问题
  12. springboot发送邮件
  13. 泰山OFFICE技术讲座:WORD光标出错
  14. 安装运行太极框架Android搞机操作root
  15. Excel工作日计算时,怎样去除周末和节假日
  16. 一行代码帮你彻底解决pip下载速度慢的问题,更改pip源至国内镜像(无须新建文件夹), 享受飞一般的速度
  17. 在日签证更新手续 网址
  18. 屏蔽常见垃圾蜘蛛和扫描工具的两种办法
  19. 利用OPENCV创作梵高艺术风格图片
  20. 在哪下载Mysql数据库的JDBC驱动jar包

热门文章

  1. 使用python绘制wav 音频文件频谱图
  2. 控制QTextEdit中字体颜色
  3. MFC颜色调配 | vc++6.0颜色设置,如何修改控件颜色
  4. 怎么制作搞笑的GIF
  5. 图片文字修改用什么软件?3个简单实用软件推荐
  6. android锁屏快捷键设置,【Android高级】锁屏功能简单实现
  7. keras、TensorFlow输出中间层结果的4种方法
  8. 电路啸叫的原因????!!!!!
  9. Docker的常用命令
  10. 判断文件或文件夹是否存在的方法