zoukankan      html  css  js  c++  java
  • 关于使用10字节的内存读取数据和写入数据

      今天遇到一个有趣的问题,如果我们使用byte数组去存储int或者dobble数据会怎么样

    首先我们需要了解的是计算机是通过补码的形式存储值得,这样更方便操作

        采用补码的原因或好处如下,采用补码运算具有如下两个特征:

        1)因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。

        2)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

        这样的运算有两个好处:

        1)使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。)

        2)加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。

         

    1.int转byte[]

        那么比如我们使用byte[] 存储一个int 值,我们知道int有4个字节,那么我们就需要将4个长度的bye数组来存储,那么每一个位置上存储int类型的一个字节位上的数值,思路大致是这样,那么这样就存在着一问题,是高位存储还是,下位存储,一般采用高位,因为我们将 byte数组index大的来存储,int的第一个8位,话不杜说上代码

      public static  void  int2Byte(int db) {
         byte[] b = new byte[4];//我们就使用4长度数组,方便理解
                       for(int i=0;i<4;i++){
                              b[4-1-i] = (byte)((db >> 8*i)& 0xff))    
                    }
            
        }

      此处我们与一个 0xff(00000000 00000000 00000000 11111111),前3个字节都置为00000000,最后一个字节保存不变,其实这一步并不需要,因为这里byte只会截取后八位,所以没必要;

    2.byte[]转int

      

     public static byte2int( bye[] arr){  
      int  sun=0;                
       for(int j=0;j<4;j++) {
         int n = (int)arr[j]& 0xff;
           n <<= (4-j) * 8;
            sum += n;
                     }
    
    }

    这里的0xff就非常用必要了,可以使前三个字节变成000000000000;

    遇事犹豫不决时,须持虎狼之心,行仁义之事
  • 相关阅读:
    js判断值是否为数字
    人脸识别 python调用face++ 功能测试
    【转载】Cesium基础使用介绍
    数据分析R&Python-Rpy2包环境配置
    VR/AR软件—Mirra测试(截至2017/11/13),使AR/VR创作更加便捷
    Cesium左右立体视觉续篇——遗留问题(渲染错误)以及临时替代方案
    在CesiumVR基础上实现3D左右立体视觉
    关于css样式的选择问题
    圣杯布局和双飞翼布局
    冒泡排序法
  • 原文地址:https://www.cnblogs.com/fmlyzp/p/10388299.html
Copyright © 2011-2022 走看看