精华内容
下载资源
问答
  • 四字节16进制数可转换为四个进制字节(Bytes),从而使用Api函数来处理成单精度浮点数。 以下用VB代码处理。 VB有专门的API函数CopyMemory能处理2-10进制浮点数转换和10-2进制浮点数转换。 下列代码...

    四字节16进制数可转换为四个二进制字节(Bytes),从而使用Api函数来处理成单精度浮点数。

    以下用VB代码处理。

    VB有专门的API函数CopyMemory能处理2-10进制浮点数转换和10-2进制浮点数转换。

    下列代码演示了10进制Single(单精度浮点型转为16进制字符显示的浮点数和其相反运算:

    Option Explicit
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Private Sub BinToSin_Click()
        Dim sinStr As String
        Dim sinSj As Single
        Dim Buffer(3) As Byte
        Dim i As Integer
        sinStr = Text2
        For i = 1 To Len(Text2) Step 2
            Buffer((7 - i) / 2) = Val("&H" & Mid(sinStr, i, 2))
        Next
        CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4
        Text3 = sinSj
    End Sub
     
    Private Sub SinToBin_Click()
        Dim i As Integer
        Dim hexData As String
        Dim a As Single
        Dim Buffer(3) As Byte
        a = Val(Text1)
        CopyMemory Buffer(0), a, 4
        For i = 0 To 3
            If Len(Hex(Buffer(i))) = 1 Then
                hexData = "0" & Hex(Buffer(i)) + hexData
            Else
                hexData = Hex(Buffer(i)) + hexData
            End If
        Next
        Text2 = hexData
    End Sub

    需要注意的事项是这四字节的高低字节排序,不能搞错。

    VB的Single 数据类型

    Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。

    在内存以32位二进制形式存在:

    XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX

    第1位为符号位

    第2-9位为阶码位

    第10-32位为2进制小数尾值

    即F2 ^ n * 1. XXXXXXX XXXXXXXX XXXXXXXX

    其中

    F为正号或负号(首为为0正数,首位为1负数

    n为2-9位组成的BYTE数据值

    XXXXXXX XXXXXXXX XXXXXXXX为尾数


    1、4字节指的是有4个内存单元,每个单元各放着一个0~255的整数,拼凑起来形成一个32个二进制位的数儿;
    2、根据不同的视角来看待或理解这个数儿,可以得出很多不同的答案;
    3、针对你的问题,其实是“将视角切换为单精度浮点数”,单精度浮点数在内存单元中如何表示,是个挺复杂的事儿,具体是国际电气标准IEEE754规定的,如果你能看懂,绝对可以品味到其中的精彩,这个才是最核心的“原理”;
    4、从你的描述上看,似乎也并不是想了解到最底层的透彻,仅仅是了解这段程序如何能工作,如果是这样的话,答案是:强制类型转换。(float*)&cByte的意思是带上一副“单精度浮点数”的眼镜,去看cByte数组中的内容,前面再加一个*,意思是“看好了,拿出来”。


    ///

    c++?c局部变量只能放在函数开头
    float pfValue=*(float*)&cByte;
    &cByte的地址当作(float*)型指针取内容







    展开全文
  • 实验多位十进制数相减实验 (一)、实验题目: 将两多位十进制数相减,要求被减数,减数均以 ASCII码形式按顺序存放在以DATA1和DATA2为首的5内存单元(低位在前),结果送回DATA1处。 DATA SEGMENT  ...

    微机实验四 ——两个多位十进制数相减实验

    一、实验题目

    将两个多位十进制数相减,要求被减数,减数均以 ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

    二、基本代码

    DATA SEGMENT 
    DATA1  DB  33H,39H,31H,37H,38H      ;第一个数据(作为被减数) 
    DATA2  DB  36H,35H,30H,38H,32H      ;第二个数据(作为减数) 
    MES1   DB  '-','$' 
    MES2   DB  '=','$' 
    DATA ENDS 
    STACK SEGMENT                       ;堆栈段 
    STA DB 20DUP(?) 
    TOP EQU LENGTH STA 
    STACK ENDS 
    
    CODE SEGMENT 
    ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA 
    START:  MOV     AX,DATA         
    		MOV     DS,AX         
    		MOV     ES,AX         
    		MOV     AX,STACK         
    		MOV     SS,AX         
    		MOV     AX,TOP         
    		MOV    SP,AX        
    		MOV    SI,OFFSET DATA1         
    		MOV    BX,05    
    		    
    		CALL    DISPL             ;显示被减数         
    		MOV    AH,09H         
    		LEA     DX,MES1         
    		INT     21H        
    		MOV    SI,OFFSET  DATA2      
    		MOV    BX,05               ;显示减数         
    		CALL    DISPL         
    		MOV    AH,09H
     		LEA     DX,MES2         
     		INT     21H 
             MOV    SI,OFFSET DATA1         
             MOV    DI,OFFSET  DATA2 
             CALL    SUBA               ;减法运算         
             MOV    SI,OFFSET  DATA1 
             MOV    BX,05               ;显示结果         
             CALL    DISPL         
             MOV    DL,0DH         
             MOV    AH,02H         
             INT     21H         
             MOV    DL,0AH         
             MOV    AH,02H         
             INT     21H         
             INT     21H         
             MOV    AX,4C00H         
             INT     21H 
          
             
    DISPL   PROC   NEAR                ;显示子功能 
    DSI:   MOV    AH,02 
            
    	  MOV   DL,[SI+BX-1]         ;显示字符串中一字符         
          INT    21H   
           DEC     BX                  ;修改偏移量         
           JNZ     DSI         
           RET 
    DISPL  ENDP 
    
    SUBA   PROC    NEAR         
            MOV     DX,SI         
            MOV     BP,DI         
            MOV     BX,05 
    SU1:   SUB     BYTE PTR[SI+BX-1],30H         
    	   SUB    BYTE PTR[DI+BX-1],30H 
            DEC     BX                          ;将ASCII 码表示的数字串           
            JNZ     SU1                          ;转化为十六进制的数字串         
            MOV     SI,DX         
            MOV     DI,BP 
            MOV     CX,05                        ;包括进位,5位         
            CLC                                   ;清进单位 
    SU2:    MOV     AL,[SI]         
            MOV     BL,[DI] 
    
    SBB     AL,BL                        ;带进位相减 
            AAS                                  ;非组合BCD码的减法调整         
            MOV     [SI],AL                      ;结果送被减数区         
            INC     SI 
            INC     DI                           ;指向下一位         
            LOOP    SU2                         ;循环         
            MOV     SI,DX         
            MOV     DI,BP         
            MOV     BX,05 
    SU3:    ADD     BYTE PTR  [SI+BX-1],30H         
    		ADD     BYTE PTR  [DI+BX-1],30H 
            DEC     BX       ;十六进制的数字串转化ASCII码表示的数字串        
             JNZ     SU3         
             RET      
    SUBA   ENDP 
    CODE   ENDS 
    END    START
    

    三、可显示负号结果

    DATAS SEGMENT
    DATA1 DB 38H,39H,31H,37H,33H;五位被减数,低位在前,这是存的字符ASCII值
    DATA2 DB 38H,39H,31H,37H,39H;减数
    DATA3 DB 38H,39H,31H,37H,33H;被减数备用数据,用作负数情况
    
    
    MES1 DB '-','$'
    MES2 DB '=','$'
        ;此处输入数据段代码  
    DATAS ENDS
    
    STACKS SEGMENT
    STA DB 20 DUP(?)
    TOP EQU LENGTH STA;预定义TOP为STA的长度
        ;此处输入堆栈段代码
    STACKS ENDS
    
    
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:DATAS
    START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    MOV AX,STACKS;将名称为stacks的段(也就是ss段)的段地址送入ax
    MOV SS,AX;将stacks段基址送入SS栈段
    MOV AX,TOP;将STA的长度送入AX
    MOV SP,AX;将stacks偏移地址送入ss:sp
    
    ;显示被减数
    MOV SI,OFFSET DATA1;数据段DATA1地址送入SI
    MOV BX,05
    CALL DISPL
    
    ;显示-符号,MOV AH,09H表示在屏幕上显示移偏地址存在DX中为MES1的字符串。
    MOV AH,09H
    LEA DX,MES1;装载MES1的有效地址到dx,该语句可以用mov dx,MES1代换
    INT 21H
    
    MOV SI,OFFSET DATA2
    MOV BX,05;显示减数
    CALL DISPL
    
    ;显示=符号,MOV AH,09H表示在屏幕上显示移偏地址存在DX中为MES2的字符串
    MOV AH,09H
    LEA DX,MES2
    INT 21H
    
    MOV SI,OFFSET DATA1;相当于定义下标
    MOV DI,OFFSET DATA2;相当于定义下标
    
    CALL SUBA;减法运算
    
    ;负数情况
    JNC S;当进位标记CF为0时跳转,为1时执行后面的指令,加负号
    MOV AH,09H
    LEA DX,MES1;装载MES1的有效地址到dx,该语句可以用mov dx,MES1代换
    INT 21H
    MOV SI,OFFSET DATA2;相当于定义下标
    MOV DI,OFFSET DATA3;相当于定义下标
    CALL SUBA;减法运算
    ;负数运行
    MOV SI,OFFSET DATA2
    JNC P
    ;非负数运行
    s:MOV SI,OFFSET DATA1
    
    
    
    
    
    p:MOV BX,05;显示结果
    CALL DISPL
    MOV DL,0DH;0DH是回车符确认的ASCII码
    MOV AH,02H
    INT 21H
    MOV DL,0AH;这里的0AH是换行符的ASCII码,
    MOV AH,02H
    INT 21H
    INT 21H
    MOV AX,4C00H
    INT 21H		
    
    
    
    ;显示子功能		
    DISPL PROC NEAR
    DSI:MOV AH,02
    MOV DL,[SI+BX-1];显示字符串中一字符
    INT 21H
    DEC BX;修改偏移量
    JNZ DSI
    RET
    DISPL ENDP
    
    ;减法运算子功能
    SUBA PROC NEAR;
    MOV DX,SI
    MOV BP,DI
    MOV BX,05
    ;;SU1将数据转化为十六进制的数字
    SU1:SUB BYTE PTR[SI+BX-1],30H;BYTE PTR指明访问内存单元是一个字节
    SUB BYTE PTR[DI+BX-1],30H
    DEC BX;将ASCII码表示的数字串
    JNZ SU1
    MOV SI,DX
    MOV DI,BP
    MOV CX,05;包括进位,5位
    CLC;清除CF位 
    ;;带进位相减
    SU2:MOV AL,[SI]
    MOV BL,[DI]
    SBB AL,BL;sbb是带借位减法指令,它利用了CF位上记录的借位值,sbb al,bl: (al)=(al)-(bl)-CF
    AAS;AAS 减法的ASCII调整指令,调整的最后结果是bcd码,可以用来明确直接地显示十进制数数字
    ;若AL寄存器的低4>9或AF=1,则:
    ;AL=AL-6,AF置1;将AL寄存器高4位清零;
    ;AH=AH-1,CF置1;否则,不需要调整。
    MOV [SI],AL;结果送被减数区
    INC SI
    INC DI;指向下一位
    LOOP SU2;循环
    ;SU3十六进制的数字串转化ASCII码表示的数字串
    MOV SI,DX
    MOV DI,BP
    MOV BX,05
    
    ;这里CF都是1
    JC SU4;CF=1时候跳转
    ;CF为0运行SU3
    SU3:
    ADD BYTE PTR [SI+BX-1],30H;ADD同样影响CF标志位!
    ADD BYTE PTR [DI+BX-1],30H
    DEC BX
    JNZ SU3;JNZ 结果不为零则转移ZF=0
    JZ abc
    
    ;CF=1运行SU4
    SU4:
    ADD BYTE PTR [SI+BX-1],30H;ADD同样影响CF标志位!
    ADD BYTE PTR [DI+BX-1],30H
    DEC BX
    JNZ SU4;JNZ 结果不为零则转移ZF=0
    STC;CF=1,CLC=0
    
    
    
    
    abc:
    RET
    SUBA ENDP
    
    
      
    ;此处输入代码段代码
    MOV AH,4CH
    INT 21H
    CODES ENDS
        END START
    
    
    
    
    展开全文
  • 1.当两进制数运算时,整数位和小数位字长必须相等,即两个数的整数位数应相同,小数位数应相同;若两个数的位数不同或者运算时溢出,则应该扩展位数! 2.整数和小数 扩展位数的规则: (1)正数:有符号或无符号...

    1.当两个二进制数运算时,整数位和小数位字长必须相等,即两个数的整数位数应相同,小数位数应相同;若两个数的位数不同或者运算时溢出,则应该扩展位数!

    2.整数和小数 扩展位数的规则:

    (1)正数:有符号或无符号数的原码,反码,补码,一律整数在高位补0来补充少的位数,小数在低位补0来补充少的位数;

    (2)原码负数:整数高位补0,小数低位补0;

    (3)反码负数:整数高位补1,小数低位补1;

    (4)补码负数:整数高位补1,小数低位补0;(非常重要,在硬件编程中经常用到!!!)

    例子:verilog中,将a扩充为10位的b

              wire [7:0] a;
    
      wire [9:0] b = {{2{a[7]}},a};
    
    展开全文
  • 不太完善的进制转换器(只能将十进制数转换成其他进制
    #include "stdio.h"
    int main()
    {
    char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    int c[64],d,i=0,base;
    long n;
    printf("Enter a number:\n"); /*输入的十进制整数*/
    scanf("%ld",&n);
    getchar();/*位于两个输入之间,用于接受回车字符*/
    printf("Enter new base:\n"); 
    scanf("%d",&base);/*进制转换的进制类型*/
    while(n!=0)/*商在小于或等于基数的的时候退出循环*/
    {
    c[i]=n%base;/*’%‘运算符使用很巧,可以让数在一定的范围内变化*/
    i++;
    n=n/base;/*进制转换的机理:1、十进制转化为二、八、十六进制:除基(2、8、16)取余,倒序写出(注意:十进制转化为十六进制,十、十一、十二、十三、十四、十五依次输出为A、B、C、D、E、F);2、二进制转化为十进制:每位都用该位乘基的位数-1次方相加;二进制转化为八进制,可以使用十进制作为中间桥梁;同理二进制转换为十六进制时,也可以使用十进制转化为十六进制。*/
    }
    printf("Transmite ner base:\n");/*十进制转化为二、八、十六进制都需要把除得的数逆序书写*/
    for(--i;i>=0;--i)
    {
    d=c[i]; printf("%c",b[d]);
    }
    return 0;
    }
    展开全文
  • 进制数的运算

    2020-06-01 23:08:44
    有关二进制的算术运算、逻辑运算
  • 程序,数值、字符串和图像等信息在计算机内部都是以二进制数值的形式来表现的。也就是说,只要掌握了使用二进制数来表示信息的方法及其运算机制,也就自然能够了解程序的运行机制了。那么,为什么计算机处理的信息...
  • 将十进制数转化成IEEE754格式

    千次阅读 多人点赞 2019-07-15 21:38:43
    快期末考试了,在复习《计算机组成与系统结构》时对将十进制数转化为IEEE754格式这知识点很困惑,怪自己在老师当初讲的时候没好好听讲,好在查阅了资料后弄懂了这知识点,便记录下来给也有这疑惑的同学给...
  • 进制、八进制、十进制、十六进制数的转换方法一)、数制 计算机采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二...
  • 进制转换为八进制或十六进制

    千次阅读 2017-05-21 21:18:50
    》二进制转换为八进制  #3位二进制数按权展开相加得到1位八进制数。注:3位二进制转成八进制是从右到左开始转换,不足时补0。... #八进制数通过除以2取余,余数倒序排列得到二进制数,每进制数对应3进制数
  • 计算机的十进制0sijiayi092014.07.08浏览168次分享举报与十进制数291等值的十六进制数为__a. 213 b. 132 c. 123 d. 231 与十进制数254等值的二进制数是___ a. 11111011 b. 11111110 c. 11101110 d. 11101111 十...
  • 3位二进制数B2B1B0的范围为000B~111B, 即为0D~7D, 则Y=2B的范围为0D~14D, 即为0000B~1110B, 所以需要4位二进制数来表示输出. 设位输出Y=Y3Y2Y1Y0. 根据Y=2B的关系绘制真值表. B2 B1 B0 Y3 Y2 Y1...
  • public List<Integer> grayCode(int n){//n表示二进制的位数,格雷码任意两相邻的代码只有一位二进制数不同 List<Integer> res = new ArrayList(); for (int i = 0;i (2,n);i ++){//0~2^n res.add((i / 2) ^ i...
  • 数制及相互转换一、单选题1、下列数据数值最小的是A、01110000BB、249DC、125QD、AAH2、下列数据数值最大的是A、3...进制数是A、11100B、11010C、11000D、101005、下列数据数值最小的是A、11110000(二进制)B...
  • 将十进制数 -3 / 8 表示成浮点数规格化形式。微机原理,不涉及IEEE。其中阶符阶码共4位(用补码表示),尾符尾数共7位(用补码表示)。已知答案是:11111010000想知道一步步的过程。题目链接:...
  • 1)、用A命令键入下列程序: MOV BX,1000 ;初始地址 MOV DI,2000 ;目标地址 MOV CX,4 ;设置循环次数(一共16位,分次) LOP: PUSH CX ;保护现场 MOV CL,4 ROL DX,CL;左循环DX的位,补到最后面 POP ...
  • 进制中1的个数

    千次阅读 2018-07-15 16:45:29
    输入一整数,输出该进制表示1的个数。其中负数用补码表示。 方法一: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最直观的方法,就是把这个数转变为二进制,...
  • 第一步:先求这进制数正数的二进制数 第二步:取反 第三步:加1 如下列 -80 第一步:80的二进制是01010000 (取8位) 第二步:取反 10101111 第三步: 加1 10110000 所以-80 = 10110000 转八进制 从右到左,三...
  • 进制和十六进制

    千次阅读 2018-08-16 08:40:17
    课程导言 【最早的编程语言是二进制语言,也是计算机能够直接...通过本篇的学习,你将了解到为什么计算机能够直接识别二进制语言,二进制的计数原理以及与十进制、十六进制之间的数值转换。】   在讲述二进制之...
  • 题目 ... 这函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 100110000000
  • 数字电路基础知识——数字IC进制问题(原码,反码,补码以及各进制的转换) 一、原码,反码,补码,符号-数值码。 以4bit为例,给出各自表示的数值范围。 原码: 符号位+真值,最高位表示符号位。 0表示正数,...
  • 数码管的动态显示是对每数码管采用分时复用的方式轮流点亮每数码管,在同一时间只会点亮一数码管。 分时复用的扫描显示利用了人眼的视觉暂留特性,如果公共端的控制信号刷新速度足够快,人眼就不会区分出LED...
  • 进制转换笔记

    2018-04-24 22:53:21
    1.第一类 二进制、八进制、十六进制 转 十进制举例:十进制数1234.561*10^3+2*10^2+3*10^1+4*10^0+5*10^-1+6*10^-21000+200+30+4+0.5+0.06=1234.56同理适用于二进制、八进制和十六进制——只不过变化的是基数,基数...
  • 日常生活人们使用的是十进制数,但计算机使用的是二进制数,程序员还使用八进制和十六进制数同一进制直接加减运算同一进制直接加减运算同一进制直接加减运算同一进制直接加减运算不同进制之间的转化典型案例1....
  • 进制在数学的妙用

    万次阅读 多人点赞 2011-08-24 22:17:14
    十八世纪初,莱布尼茨发明了二进制数,当时的他肯定没有预料到二进制在信息时代会有着如此广泛的应用。...在计算机科学和大量应用数学领域,二进制记数法是必不可少的。在趣味数学方面,同样也有广泛的应用。 让
  • 计算机的进制转换

    2021-07-30 22:17:03
    计算机的数制也称为进制,主要有下列四个定义 1.1数制  计数的方法,指用一组固定的符号和统一的规则表示数值的方法  比如:2进制,用两个阿拉伯数字:0、1     10进制,用十个阿拉伯数字:0到9 1.2位  ...
  • 栈-十进制整数转换为八进制

    千次阅读 2018-10-04 16:53:04
    有一简单算法基于下列原理: N=(N div d) * d + N mod d (div为整除运算,mod为求余运算) 输入:任意一非负十进制整数. 输出:与其等值的八进制数。 运行结果: 由于上述计算过程是从低位待高位孙旭产生八...
  • C语言 进制转换

    2016-01-12 19:32:42
    进制基本概念 1.什么是进制? 是一种计数的方式,数值的表示形式 2.常见的进制进制、二进制、八进制、十六进制 3.进制数字进位方法 十进制 0、1、2、3、4、5、6、7、8、9 逢十进一 二进制 0、1 逢二进一 书写形式:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,826
精华内容 24,730
关键字:

下列四个不同进制数中