精华内容
下载资源
问答
  •  老师讲的那个东西,我这里就把它形容为用二进制科学计数法表示float浮点数据  相信大家对10进制的科学计数法都很了解,而老师给出的式子是2x×1.y,这里我们只要换一下位置,换成1.y×2x。是不是熟悉多了?10...

    //从本人空间日志搬运而来

    //2017-10-25 22:01

     

    首先先说一下今天的重难点吧

            老师讲的那个东西,我这里就把它形容为用二进制科学计数法表示float浮点数据

            相信大家对10进制的科学计数法都很了解,而老师给出的式子是2x×1.y,这里我们只要换一下位置,换成1.y×2x。是不是熟悉多了?10进制里1.y是属于1到10的,二进制自然是一到二。

            理解了这个式子的含义,下一步就是把它用float浮点数据类型表示出来,也就是存储到计算机里的形式。

            这里插一张图

            大家都清楚float数据类型占4个字节,也就是32位。而double是64位(8字节),所以精度会更高。float数据类型这32位里第一位是表示符号,1为负,0为正。后面8位是指数位(阶码),也就是x的二进制表达(补到8位)。最后是小数位(尾数),也就是y的二进制表达(补到23位)。double型数据里的x,y分别为11位,52位。其实如果不看符号位,把x,y倒过来,就是我们熟知的科学计数法形式了。

            我们给出一个浮点型数据:129.96(>1)

            首先分离出一个2的最大次幂,也就是128,2的7次幂,x=7,也就是00000111。怎么理解呢,可以想成是把原数的整数部分拿出来化为二进制,然后取最高位。

            剩下的1.96,就是2的7次方乘以0.y。

            先把1拿出来。这里把y化为二进制,具体方法老师上课有讲,就是乘以2然后有一取1,没1取0。取的位数为23-x。具体过程不赘述,最后的结果为1.11110101...(小数点后取23-x位)。最后根据之前拿出来的2的幂次,向左移动小数点。类比到10进制科学计数法很好理解,10的指数为几则往左移几位。

            但这里的x还不是最终的x,还得加128。个人认为这是防止原数小于1,x为负的情况(即保证x为正)。

            原数>0,符号位为0。

            最后结果为:0 10000111 00000011111010111000010

            我们在给一个例子:0.073(<1)

            这里的x就为负数了,一个一个顺:2的-1次幂,2的-2...  有2的-4次幂,0.0625。剩下0.0105,一样的方法,乘以二一次一次乘。这里的x为-4,我们就取23+4=27位。最后结果为.000000010101100...我们再把小数点往右移4位,得到.00010101100...(应该是23位)。

            符号为正取0,x=-4+128=124也就是01111100。

            最终结果:0 01111100 00010101100000010000010

            最后在挂两个链接,有兴趣的同学们可以瞅瞅:
            1.原码,补码,反码详解
             http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html ;

            2.float浮点数的二进制存储方式及转换
            http://blog.csdn.net/rayxp/article/details/40855665
            有问题请在评论区留言,一起交流学习。上面只是一个大一新生的一些不成熟的总结跟猜想假设。 

    展开全文
  • Java字节二进制字节流、字符

    万次阅读 2019-06-22 00:16:39
    Java字节二进制字节流、字符

    1 计算机基础

    1.1 二进制

    二进制数据是用0和1两个数码来表示的数:它的基数为2,进位规则是"逢二进一",借位规则是"借一当二"。
    当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。

    1.1.1 bit Byte KB MB关系

    • 1 bit
      计算机中的二进制位(bit)是长度单位,是一个非常微小的开关,用"开"来表示1,"关"来表示0。
      因为计算机通信和存储的时候都是以010101这样的二进制数据为基础的,这儿的一个0和1占的地方就叫bit(位),即一个二进制位。
    • 2 Byte
      字(Byte)节也是长度单位。
      Byte是一个字节保存的,有8个bit位,即8个0或1,8位的第一个位是符号位。
    00000001[二进制]=1[十进制] 
    10000000[二进制]=-1[十进制]
    二进制区间[127~-128]:
    正: 01111111[二进制]=127 [十进制] 
    正: 11111111[二进制]=-128 [十进制] 
    负数最大为1111 1111,也就是数字-128
    
    • 3 单位关系
    单位 关系
    1Byte 8bit
    1KB 1024B
    1MB 1024KB
    1GB 1024MB

    1.2 八进制

    Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。
    一些编程语言中常常以数字0开始表明该数字是八进制,八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。

    1.3 十六进制

    十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。
    它由0-9,A-F组成,字母不区分大小写,与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。

    2 Java中的各进制、字节流和字符流

    2.1 代码中使用

    • 1 代码表示
      0b开始的数据表示二进制
      0开始的数据表示八进制
      0x开始的数据表示十六进制
    • 2 打印
      打印二进制Integer.toBinaryString(int i)
      打印八进制Integer.toOctalString(int i)
      打印十六进制Integer.toHexString(int i)

    2.2 Java的基本数据类型长度

    数据类型 占用字节
    char 2个Byte(2*8bit)
    short 2个Byte(2*8bit)
    int 4个Byte(4*8bit)
    long 8个Byte(8*8bit)
    float 4个Byte(4*8bit)
    double 8个Byte(8*8bit)

    2.3 字节流和字符流

    程序中所有的数据都是以流的方式进行传输或保存的,流中保存的实际上是字节文件,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。

    2.3.1 字节流与字符流

    java.io包中操作文件内容的主要有两大类:字节流字符流,两类都分为输入输出操作。

    在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成(这四个都是抽象类)。
    在这里插入图片描述

    2.3.2 Java.io包

    Java.io包其中包括:InputStream,OutputStream,Reader,Writer;

    • InputStreamOutputStream:为字节流,主要用来处理字节或二进制对象。
      如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点,所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。
      在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列,字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;

    • ReaderWriter:为字符流(一个字符占两个字节),主要用来处理字符或字符串。
      字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。
      所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好。

    字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的。

    实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联 在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的 。

    2.3.3 字节流与字符流的区别

    • 1 字节流和字符流使用是非常相似的,那么除了操作代码的不同之外,还有哪些不同呢?

    字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。
    字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

    • 2 那开发中究竟用字节流好还是用字符流好呢?

    在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。
    如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

    3 原码、反码、补码

    我们来谈谈另一个话题:原码反码补码
    计算机中,所有数据最终都是使用二进制数表达。
    负数如何用二进制表达呢
    在计算机中,负数以其正值的补码形式表达。

    3.1 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

    假设有一个int 类型的数,值为5,那么,我们知道它在计算机中表示为:5
    其原码如下:
    00000000|00000000|00000000|00000101

    3.2 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

    取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
    其反码如下:
    11111111|11111111|11111111|11111010

    3.3 补码:反码加1称为补码。

    其补码如下:
    11111111|11111111|11111111|11111010 + 1 = 11111111|11111111|11111111|11111011

    再举一例:
    -1在计算机中如何表示。
    1、先取1的原码:
    00000000|00000000|00000000|00000001
    2、得反码:
    11111111|11111111|11111111|11111110
    3、得补码:
    11111111|11111111|11111111|11111111
    可见-1在计算机里用二进制表达就是全1,16进制为:0xFFFFFFFF。

    展开全文
  • # 利用 struct 处理字节流中的mac地址 适用于小端地址操作系统 def mac2str(bi_mac): mac = "" for i in bi_mac[:-1]: i_str = i + "\x00\x00\x00" tmac, = struct.unpack("i", i_str) ...
    import struct
    
    # 利用 struct 处理字节流中的mac地址 适用于小端地址操作系统
    def mac2str(bi_mac):
        mac = ""
        for i in bi_mac[:-1]:
            i_str = i + "\x00\x00\x00"
            tmac, = struct.unpack("i", i_str)
            mac += str(tmac) + ":"
        i_str = bi_mac[-1] + "\x00\x00\x00"
        tmac, = struct.unpack("i", i_str)
        mac += str(tmac)
        return mac
    

      

    好像官方没有提供把 pcap 中的 Mac 地址字节流转换为可读格式的方法。

    自己写了一个,请多指教!

     

    虽说没有内建的,但我在 dpkt 那边找到一个更好的实现比我的好多了......

    学习一个

    def mac_addr(address):
        """Convert a MAC address to a readable/printable string
    
           Args:
               address (str): a MAC address in hex form (e.g. '\x01\x02\x03\x04\x05\x06')
           Returns:
               str: Printable/readable MAC address
        """
        return ':'.join('%02x' % ord(b) for b in address) # 16进两位数,字母用小写表示
    

      

    python format 字符说明:

    %% 百分号标记 #就是输出一个%
    %c 字符及其ASCII码
    %s 字符串
    %d 有符号整数(十进制)
    %u 无符号整数(十进制)
    %o 无符号整数(八进制)
    %x 无符号整数(十六进制)
    %X 无符号整数(十六进制大写字符)
    %e 浮点数字(科学计数法)
    %E 浮点数字(科学计数法,用E代替e)
    %f 浮点数字(用小数点符号)
    %g 浮点数字(根据值的大小采用%e或%f)
    %G 浮点数字(类似于%g)
    %p 指针(用十六进制打印值的内存地址)
    %n 存储输出字符的数量放进参数列表的下一个变量中

    转载于:https://www.cnblogs.com/learn-to-rock/p/5909654.html

    展开全文
  • 计算机二进制的浮点表示法 0.1 * 3 != 0.3 组成: 符号位: 0表示正、1表示负; 指数位: 2的n次方,n+127(对于4字节浮点数,此处为127)再换算成...按照: 二进制的科学计数法表示, 十进制的运算规律运算, 得到“1.a

    计算机二进制的浮点表示法

    0.1 * 3 != 0.3
    

    组成
    组成:

    • 符号位: 0表示正、1表示负;
    • 指数位: 2的n次方,n+127(对于4字节浮点数,此处为127)再换算成二进制;
    • 尾数位: 直接用.

    过程:

    1. 将整数部分换算成二进制;
    2. 小数部分换算成二进制:
      a) 原数*2, 得到“.”前的数放到待取数,若有待取数,则放置到后一位;
      b) 得到“.”后的数若为0, 则停止, 否则重复;
    3. 将两部分二进制组合成“%.%”的小数形式;
    4. 按照: 二进制的科学计数法表示, 十进制的运算规律运算, 得到“1.a*2^b”的形式;

    a) 按照正负, 在符号位放置0或1;
    b) b+127 (4字节浮点数是127), 换算成二进制放到指数位;
    c) 将“.”后的数放到尾数位.

    例子:

    1. 十进制→二进制→科学计数法十进制→二进制→科学计数法

    2. 0.60.6

    3. -0.1-0.1

    4. 1.251.25

    参考:

    1. https://blog.csdn.net/marco__/article/details/102515668
    2. https://tool.lu/hexconvert/
    3. https://cloud.tencent.com/developer/article/1473541
    4. https://zhidao.baidu.com/question/1452313463315466300.html
    5. https://baike.baidu.com/item/BCD%E7%A0%81/826461?fr=aladdin
    6. https://baike.baidu.com/item/%E9%98%B6%E7%A0%81/7798285?fr=aladdin
    展开全文
  • 《计算机应用基础第四章《二进制的学习》课件.ppt》由会员分享,可在线阅读,更多相关《计算机应用基础第四章《二进制的学习》课件.ppt(26页珍藏版)》请在人人文库网上搜索。1、信息工程系,讲课人:*,计算机应用基础...
  • 本文原文来自 《二进制的认识和Java中对二进制的使用》。 本文的讲解及代码部分都是针对Java语言,可能对其它语言并不适用,但介于这部分内容较底层,因此可酌情参考。 一、认识二进制 二进制,是计算技术中广泛采用...
  • 2)二进制的简写形式二、进制运算1)八进制运算表(1) 加法运算表(2)乘法运算表(3)八进制简单运算题三、数据宽度1)什么是数据宽度2)计算机中常用的基本数据宽度四、无符号数有符号数进制进制也就是进位计数制,是人为...
  • 计算机基础二进制十进制1.4 数字与编码 1.4.1 二进制 1.4.2 进位制 1.4.3 十进制与二、八、十六进制的转换 1.4.4 二进制与其他进制的转换 1.4.5 二、八、十六进制数字对照表 1.4.1 二进制 电子计算机中,数的表示...
  • 二进制数、位和字节

    千次阅读 2013-12-19 15:15:43
    书写数字的常用方法是十进制。例如:2157的千位是2,百位是1,十位是5,个位是7,这意味着可以将2157看作如下形式: 2×1000+ 1×100 + 5×10 + 7×1 也就是如下形式: 2×103+1×102+ 5×101+7×100 姑且...
  • 二进制

    2020-02-16 21:31:04
    这个时候就需要二进制二进制是基于两个数字的(0和1)。二进制只能表示两个数 1和0。列如二进制的101表示有1个4,0个2,1个1。加起来表示的十进制数字才是5,所以想要进行表示大的数字,二进制需要的位数更多。 在...
  • 今天带来的内容是来自一线测试工程关于软件测试基础能力必备的知识“补码计数法、余码计数法和浮点数计数法”。这一部分知识是对计算机数据存储、和二进制的进一步理解。且听小唐满满给你道来,希望阅读完本篇文章...
  • 二进制是什么? 想要了解二进制数是如何表示计算机信息的?先要追本溯源, 二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的符号0(代表零...
  • 3.为什么一个字节是8位二进制,而不是其他数目?4.为什么引入八进制、十六进制?(1)二进制转换?(2)十六进制转换? 1.计算机为什么采用二进制? 因为二进制是在电路中最好控制的,只有1和0两种状态.代表接通和...
  • #include <stdio.h> float Hex_To_Decimal(unsigned...*Byte,int num)//十六进制到浮点数{ // char cByte[4];//方法一 //  for (int i=0;i<num;i++) //  { // cByte[i] = Byte[i]; //  } /...
  • 话题:计算机中采用二进制编码的原因是什么回答:计算机采用二进制的原因 (1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。 (2)简化运算...
  • Java-二进制

    2016-04-01 19:56:50
    二进制 什么是二进制?1)逢2进1的计数规则,数字:0,1.权:1,2,4,8…. 2)只要能够支持计数,就能够支持任何的数学运算 为什么使用二进制?优点:使用2进制是计算机硬件成本最优的选择 缺点:与人的计数习惯不同 Java利用...
  • 浮点数二进制表示

    千次阅读 2014-10-10 19:23:15
    上面这条命令,声明了一个整数变量,类型为int,值为9(二进制写法为1001)。普通的32位计算机,用4个字节表示int变量,所以9就被保存为00000000 00000000 00000000 00001001,写成16进制就是0x00000009。 那么,...
  • 二进制编码知识

    2016-05-17 20:18:12
    二进制的表示为符号位+数值位,对于浮点型数据,十进制转二进制的方式如下将十进制浮点型数据转换为二进制时分别将整数部分和小数部分转化为二进制对于整数部分,每次除2取余直到商为0,第一个除所得余数为最低位...
  • 1.什么是进制转换 进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本...2.二进制 位权:一个字节表示八个比特位,这八个比特位分别代表的位权是 128 64 32 16 8 4 2 1 ,即128=2^7, 64=2^6...
  • 计算机进制转换:二进制、八进制、十进制、十六进制一、什么是进制在生活中,我们通常都是使用阿拉伯数字计数的,也就是10进制,以10为单位,遇10进一,所以是由0,1,2、3、4、5、6、7、8、9组成的;而在计算机中,...
  • 二进制学习

    2019-03-03 11:58:00
    二进制是计算机的基础,计算机只识别二进制数据,其基础运算是采用2进制。编程语言写好的程序经过编译后变成计算机能识别的2进制数据,人不可能直接写2进制数据,其中间需要通过编程语言进行协调,所以编程语言就是...
  • 二进制与地址计算

    千次阅读 热门讨论 2016-03-20 12:53:52
    这几天看操作系统概论,里面涉及到了很多的二进制的地址计算问题,也有很多的算法,结合我们专业的学习简单谈一下二进制与地址计算的那点破事。 一、二进制  什么是二进制呢?十进制我们肯定都是听说过,...
  • 二进制 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发...
  • 十六进制计数和编址

    2018-04-29 00:08:07
    一、理解字节 8位(1个字节)是一种常用的二进制组,从00000000到11111111的二进制数可表示为从00到FF的十六进制数。前导零始终都会显示,以完整的8位表示。例如,二进制值数00001010以十六进制表示为0A。二、表示...
  • 二进制和位运算

    千次阅读 2019-03-15 20:03:26
    所有编程语言都是一种人和计算机之间的翻译工具,人的数组语言翻译成二进制给计算机读取,然后把计算机的二进制数据翻译成人类的语言呈现出来。 16进制 16进制用于缩写(简写)2进制,将2进制从后向前 每4位数转换...
  • 二进制:  1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1。  2,在计算机当中其它进制的算法基本基于2进制,因为计算机只认识0和1,比如16进制数则意味着一位16进制码由4位2进制码数表示。  3,在Java...
  • 二进制转十六进制 算法实现思想

    千次阅读 2017-11-12 20:40:13
    二进制转十六进制 算法实现思想

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,537
精华内容 11,014
关键字:

二进制字节计数法