zoukankan      html  css  js  c++  java
  • 单精度浮点数操作

    用数组存储32位单精度浮点数,并且实现有效位右移,有效数加法等,可用于计算机浮点加减法的底层模拟。

      1 package com.computerOrganizationAndArchitecture.floatQperation;
      2 
      3 import com.computerOrganizationAndArchitecture.singleprecisionfloat.SinglePrecision;
      4 
      5 /**
      6  * Created by XuTao on 2018/12/8 20:24
      7  * 这里用数组来存储32位的浮点数,
      8  */
      9 public class BinaryArray {
     10     protected int [] binArr;
     11     private int len;
     12     public BinaryArray(){
     13         len = 32;
     14         binArr = new int[32];
     15     }
     16     public BinaryArray(String s){
     17         len =32;
     18         binArr = new int[32];
     19         for (int i =0 ;i<32;i++){
     20             binArr[i] = s.charAt(i)=='1'?1:0;
     21         }
     22     }
     23     public BinaryArray(String s,int len){ //自定义长度
     24         this.len =len;
     25         binArr = new int[len];
     26         for (int i =0 ;i<len;i++){
     27             binArr[i] = s.charAt(i)=='1'?1:0;
     28         }
     29     }
     30     public BinaryArray(double n){
     31         len =32;
     32         binArr = new int[32];
     33         String ss=  new SinglePrecision().Float2Binary(n);//https://www.cnblogs.com/XT-xutao/p/9906351.html
     34         String s= ss.charAt(0)+ss.substring(2,10)+ss.substring(11);
     35         for (int i =0 ;i<32;i++){
     36             binArr[i] = s.charAt(i)=='1'?1:0;
     37         }
     38     }
     39 
     40     public void shiftRight(int n){//右移n位
     41         int [] temp = new int[n];
     42         for (int i=23;i>=n;i--){//移动
     43             binArr[i]=binArr[i-n];
     44         }
     45         for (int i=0;i<n;i++){//补0
     46            binArr[i]=0;
     47         }
     48     }
     49     public String toString(){
     50         String s= "";
     51         for (int i =0;i<len;i++){
     52             s+=binArr[i];
     53         }
     54         return s;
     55     }
     56     public String toString(int []binArr){
     57         String s= "";
     58         for (int i =0;i<binArr.length;i++){
     59             s+=binArr[i];
     60         }
     61         return s;
     62     }
     63     public String toExpString(){
     64         String s= "";
     65         for (int i =1;i<9;i++){
     66             s+=binArr[i];
     67         }
     68         return s;
     69     }
     70     public String toSignificandString(){ // 24位的
     71         String s= "";
     72         for (int i =9;i<len;i++){
     73             s+=binArr[i];
     74         }
     75         return "1"+s;
     76     }
     77     public int getExp (){
     78         return Integer.valueOf(toExpString(),2);
     79     }
     80 
     81     public static int[] add(String a,String b){//N位二进制+1位进位(0/1)相加  =N+1位
     82         //a,b长度要相等
     83         int [] temp = new int[a.length()+1];
     84         int [] arr1 = (new BinaryArray(a,a.length())).binArr;
     85         int [] arr2 = (new BinaryArray(b,b.length())).binArr;
     86         int carry = 0;
     87         for (int i =a.length()-1;i>=0;i--){
     88             temp[i+1] = arr1[i]+arr2[i]+carry;
     89             carry=0;
     90             if (temp[i+1]==2){
     91                 temp[i+1]=0;
     92                 carry = 1;
     93             }
     94             if (temp[i+1]==3){
     95                 temp[i+1]=1;
     96                 carry = 1;
     97             }
     98         }
     99         //最高位进位
    100         temp[0] = carry==1?1:0;
    101         return temp;
    102     }
    103 
    104     public int[] getNegative(){
    105         int [] temp = new int[32];
    106         for (int i=0;i<32;i++){
    107 
    108         }
    109         return temp;
    110     }
    111 
    112     public static void main(String[] args) {
    113         BinaryArray ba = new BinaryArray(-879.5);
    114         System.out.println(ba.toString());
    115         //11000100 01011011 11100000 00000000
    116         System.out.println(ba.toSignificandString());
    117 
    118     }
    119 
    120 }
  • 相关阅读:
    Foj1675数论
    JSTL与EL之间的千丝万缕
    2013多校联合2 I Warm up 2(hdu 4619)
    ios视图切换之push与present混用
    Ruby设计模式透析之 —— 适配器(Adapter)
    晓说智能指针shared_ptr为何可以实现跨模块分配和释放内存
    CSS的力量
    MySQL-select 1;
    MySQL数据库-语言简介
    Eclipse开发工具提交代码
  • 原文地址:https://www.cnblogs.com/XT-xutao/p/10111224.html
Copyright © 2011-2022 走看看