精华内容
下载资源
问答
  • ## 问题如下:请问在C语言中以十进制输出0xFFFFFFFF为什么结果为-1? * 查询过相关CSDN文章,都是在说0xFFFFFFFF是个补码,然后介绍补码转化的方法,最后得出结果为-1。 * 但是我的疑惑就在于为什么0xFFFFFFFF是...
  • 我们设A和B是两个相加的二进制数,C是从下一位获得的进位,两书相加的和在该位的值为Sum,全加器的两个输出仍然是给上一位的进位Carry。 A–B--C Sum–Carry 0–0--0 0–0 0–0--1 1–0 ...

    二进制的全加器

    二进制的算法准则

    在写全加器前,我们先了解二进制的算法准则。
    我们设A和B是两个相加的二进制数,C是从下一位获得的进位,两书相加的和在该位的值为Sum,全加器的两个输出仍然是给上一位的进位Carry。

    A–B--C Sum–Carry
    0–0--0 0–0
    0–0--1 1–0
    0–1--0 1–0
    0–1--1 0–1
    1–0--0 1–0
    1–0--1 0–1
    1–1--0 0–1
    1–1--1 1–1

    从上表得出,只要A、B、C中有任意两个输入的值是1,不管余下的一个输入值是多少,Carry一定会是1。即AB=1、AC=1、BC=1;即C=AB+AC+BC.
    而Sum为1有四种情况,ABC、A(非B)(非C)、(非A)B(非C)、(非A)(非B)C。
    那我们可以写出全加器的前一部分

    def FA(a,b,c):
        Carry = (a and b) or (b and c) or (a and c)#这两行代码就是上面我们总结出的逻辑式,不要看到太多就觉得自己看不懂
        Sum = (a and b and c) or (a and (not b) and (not c)) or ((not a) and b and (not c)) or ((not a) and (not b) and c)
        return Carry,Sum
    

    再让我们想想我们平常做加法时,都是从个位开始计算,在计算机中也是这种方法。而当我们碰到数字不同时,会自动把缺少的那位补零,但计算机不会自己动(计算机要是什么都会自己动我就不会在这敲键盘了……)。
    根据上面这句话我们可以再写一串代码。

    def add(x,y):
        while len(x) < len(y):#用来比较两个输入数字的长度,下面也是
            x = [False] + x#这行代码就是用来补零的,下面也是
        while len(x) > len(y):
            y = [False] + y
        L = []
        Carry = False
        for i in range(len(x)-1,-1,-1):#range函数从零开始计位所以减1,-1表示逆位,-1表示间距
            Carry,Sum = FA(x[i],y[i],Carry)
            L = [Sum] + L
        return (Carry,L)
    

    十进制如何转化成二进制输入

    我们输入一个值看看
    在这里插入图片描述在这里插入图片描述
    我们可以发现该函数可以输入二进制的数,但必须是列表形式,而且必须每个数占一个元素。
    那么我们可以定义一个函数,首先把十进制转化成二进制,再将每个数一个个取出,加入列表中。

    def Deci(E,F):
        e = list(str(bin(E)))
        f = list(str(bin(F)))
        x = e[2:]#因为转化成二进制,前面有0b这个表示二进制的标志也会加入列表,所以我们从第三位开始算
        y = f[2:]
        return x,y
    
    

    下图是两个代码的对比
    在这里插入图片描述

    二进制如何以十进制输出

    我今天想出来可以把第二个函数的结果以一个字符串的形式输出,然后替换里面的True和False。奈斯。
    前面的代码我改成了这个样子

    def add(x,y):
        while len(x) < len(y):
            x = [False] + x
        while len(x) > len(y):
            y = [False] + y
        L = []
        Carry = False
        for i in range(len(x)-1,-1,-1):
            Carry,Sum = FA(x[i],y[i],Carry)
            L = [Sum] + L
            l = [str(i) for i in L]#把列表里的元素都改成字符串
            list = ''.join(l)#把列表里的字符串合并成一个字符串
        return str(Carry) + list#把两个字符串合并
    
    def text(word,txt1 = 'True',txt2 = 'False',txt3 = '1',txt4 = '0'):
            word_1 = word.replace(txt1,txt3)
            word_2 = word1.replace(txt2,txt4)
            return int(word_2,2)
    

    结果没错,这里不截图了

    综上所述

    终于到了把所有函数合并的时刻了,开心。

    def FA(a,b,c):
        Carry = (a and b) or (b and c) or (a and c)#这两行代码就是上面我们总结出的逻辑式,不要看到太多就觉得自己看不懂
        Sum = (a and b and c) or (a and (not b) and (not c)) or ((not a) and b and (not c)) or ((not a) and (not b) and c)
        return Carry,Sum
    
    def add(x,y):
        while len(x) < len(y):
            x = [False] + x
        while len(x) > len(y):
            y = [False] + y
        L = []
        Carry = False
        for i in range(len(x)-1,-1,-1):
            Carry,Sum = FA(x[i],y[i],Carry)
            L = [Sum] + L
            l = [str(i) for i in L]
            list = ''.join(l)
            txt = str(Carry) + list
        return txt
    
    def text(word,txt1 = 'True',txt2 = 'False',txt3 = '1',txt4 = '0'):
        word_1 = word.replace(txt1,txt3)
        word_2 = word_1.replace(txt2,txt4)
        return int(word_2,2)
    
    def Deci(E,F):
        e = list(str(bin(E)))
        f = list(str(bin(F)))
        x = [int(i) for i in e[2:]]
        y = [int(i) for i in f[2:]]
        word = add(x,y)
        coensored = text(word,txt1 = 'True',txt2 = 'False',txt3 = '1',txt4 = '0')
        return coensored
    

    在这里插入图片描述
    呐,答案没错。这是老师给我布置得题目,十进制转化成二进制输入,把输出的二进制再转化成十进制的形式输出,我能怎么办呢。

    展开全文
  • 怎样读取硬盘各分区(包括LBA扩展分区)的起始柱面(StartCylinder)信息 然后以十进制输出, 并计算通过绝对路径指定的文件所在的柱面。
  • 编写程序把从键盘输入的四位十六进制的数,转化为十进制并且在屏幕上打印出来
  • cout 输入二进制数列" ; cin >> str; len = strlen(str); aver = len / 2; for (int k = 0; k ; k++){ if (str[k] != '0'&&str[k] != '1'){ cout 输入错误,请输入0,1组成的二进制数" ; system("PAUSE")...
    

    #include<iostream>
    #include<math.h>
    using namespace std;
    
    
    void main()
    {
     int result=0, len,aver;
     char str[100], temp;
     cout << "输入二进制数列" << endl;
     cin >> str;
     
     len = strlen(str);
     aver = len / 2;
    
     for (int k = 0; k < len; k++){
      if (str[k] != '0'&&str[k] != '1'){
       cout << "输入错误,请输入0,1组成的二进制数" << endl;
       system("PAUSE");
       return;
      }
     }
    
     for (int j = 0; j < len; j++){
      result = result + pow(2, j)*(str[j]-48);
     }
     for (int i = 0; i < aver; i++){
      temp = str[i];
      str[i] = str[len - i - 1];
      str[len - i - 1] = temp;
     }
     
     cout << str << endl;
     cout << result << endl;
     system("PAUSE");
    }
    


    展开全文
  • (2)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)。 (3)输出原字符串且令非字母字符闪烁显示。 (4)找出字符串中ASCII码值最大的字符,在字符串中用红色显示。 (5)字符串的输入和结果的输出...

    (1)从键盘输入一个字符串(串长不大于80)。
    (2)以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)。
    (3)输出原字符串且令非字母字符闪烁显示。
    (4)找出字符串中ASCII码值最大的字符,在字符串中用红色显示。
    (5)字符串的输入和结果的输出都要有必要的提示,且提示独占一行。
    (6)要使用到子程序。

    data segment
       hintinput db "please input a string:$"
       hintoutput1 db "The number of non-alphabetic characters:$";输出非字母字符的个数
       hintoutput2 db "flashes non-alphabetic characters:$";输出原字符串并闪烁
       hintoutput3 db "The character with the largest ASCII value in a string:$";ascill最大字符
               buf db 200
    	           db ?
    	           db 200 dup(?)
             count db 0
    crlf db 0ah,0dh,'$'
    data ends
    stack segment stack
       string db 500 dup(?)
    stack ends
    extra segment   ;定义附加段
    
    extra ends
    codes segment
    	assume cs:codes,ds:data,ss:stack,es:extra
    	main proc far
    start:
    mov ax,data  ;分别将数据段,堆栈段,附加段送入代码段
      mov ds,ax
      mov ax,stack
      mov ss,ax
      mov ax,extra
      mov es,ax
    ;---------------------------输入字符串提示语并进行回车换行
      lea dx,hintinput ;输入提示语
      mov ah,9;输出功能入口在dx
      int 21h
      lea dx,crlf;输入提示语后,回车换行
      mov ah,09
      int 21h
    ;---------------------------通过a号功能进行字符串输入操作并回车换行
      mov ah,0ah;输入功能入口在dx
      lea dx,buf
      int 21h
    
      lea dx,crlf        ;输入后回车换行
      mov ah,9
      int 21h
    ;------------------------------------首先用cl储存字符串长度,si源变址寄存器指向串真正开始的地方
      mov cl,buf+1;cl中放置实际字符串长度
                                   
      lea si,buf+2;si放置字符串首地址
    ;------------------------------------首先输出提示语回车换行,以十进制输出字符串中非字母字符的个数(不是a to z或 A to Z)。
      
      call print1
    ;-------------------------------------- 
      call print2
    ;---------=----------------------------
      call print3
    ;--------------------------------------
      mov ah,4ch
      int 21h
      main endp
      
    print1 proc near                         ;-----------------子程序一入口
      push cx
      push si
      lea dx,hintoutput1 ;输出提示语
      mov ah,09h;输出功能入口在dx
      int 21h
      lea dx,crlf;输入提示语后,回车换行
      mov ah,09
      int 21h
      mov dl,0 ;用dl来计数,统计符串中非字母字符的个数
      L0:
      mov al,[si]
      cmp al,'A'      
      jb L1           ;如果字符<'A',跳转到L1
      cmp al,'Z'      
      jbe L2           ;如果字符<='Z',跳转到L2
      cmp al,'a'      
      jb L1           ;如果字符<'a',跳转到L1
      cmp al,'z'      
      jbe L2           ;如果字符<='Z',跳转到L2
    
    L1:
      inc dl     ;计数器加1
    L2:
      inc si
      dec cl
      jnz L0
    ;----------------------------------输出非字母字符的个数dl
    
      cmp dl,9h
      jbe L             ;如果非字母个数小于10,则直接加30输出
      mov dh,0           ;否则把dx存入ax中
      mov ax,dx
      mov bl,10               ;ax除以10后,ah作为商
      div bl                              ;al作为余数
      mov dl,al
      mov ch,al           ;防止ah中的商被02h冲掉,先把商转移到ch中
      add dl,30h            ;先输出商,再输出余数,就是10进制了
      mov ah,02h
      int 21h
    
      mov dl,ch
    L:
      add dl,30h
      mov ah,02h
      int 21h
      lea dx,crlf     ;输出后,回车换行
      mov ah,09
      int 21h
      pop si
      pop cx
      ret
      
    print2 proc near
      lea dx,hintoutput2 ;输出提示语
      mov ah,09h         ;输出功能入口在dx
      int 21h
      lea dx,crlf        ;输入提示语后,回车换行
      mov ah,09h
      int 21h
      push cx
      push si
      cld                ;方向标志位df清零
      
    L3: 
      push cx 
      lodsb            ;从字符串串中取数据至al
      cmp al,'A'      
      jb L4            ;如果字符<'A',跳转到L4
      cmp al,'Z'      
      jbe L5           ;如果字符<='Z',跳转到L5
      cmp al,'a'      
      jb L4            ;如果字符<'a',跳转到L4
      cmp al,'z'      
      jbe L5           ;如果字符<='Z',跳转到L5
    L4:                ;如果不是字母,则进行闪烁输出
       mov bl,10000111b  ;bl属性闪烁输出
       mov bh,0        ;显示页为0
       mov cx,1        ;显示字符为1个
       mov ah,09h
       int 10h         ;输出bl属性的字符串
       mov ah,03h
       int 10h         ;读光标位置
       inc dl          ;输出列+1
       mov ah,02h
       int 10h         ;置光标位置
       jmp L6
    L5:
       mov bl,00000111b   ;bl属性为平常输出
       mov bh,0            ;显示页为0
       mov cx,1           ;显示字符个数为1个
       mov ah,09h
       int 10h             ;输出属性为bl的字符
       mov ah,03h
       int 10h             ;读光标位置
       inc dl              ;输出列+1
       mov ah,02h
       int 10h             ;置光标位置
    L6:
      pop cx
      loop L3
      
      lea dx,crlf           ;输入提示语后,回车换行
      mov ah,09
      int 21h
      pop si
      pop cx
      ret
    print3 proc near
      lea dx,hintoutput3  ;输出提示语
      mov ah,09h          ;输出功能入口在dx
      int 21h
      lea dx,crlf         ;输入提示语后,回车换行
      mov ah,09
      int 21h
      push cx
      push si
                ;count用来存放ascill最大的字符
    L7:   
      mov al,[si]
      cmp al,count       ;比较al和count的大小,如果al>count,则令al=count
      jbe L8
      mov count,al        
    L8:  
      inc si
      dec cl
      jnz L7
      pop si
      pop cx
      cld
     L9: 
      push cx 
      lodsb               ;从串中取数据至al
      cmp al,count      
      jz L11           ;如果字符==ascill码最大字符
    L10:                
       mov bl,00000111b   ;bl属性正常输出
       mov bh,0           ;显示页为0
       mov cx,1           ;显示字符为1个
       mov ah,09h
       int 10h            ;输出bl属性的字符串
       mov ah,03h
       int 10h             ;读光标位置
       inc dl             ;输出列+1
       mov ah,02h
       int 10h            ;置光标位置
       jmp L12
    L11:
       mov bl,00000100b   ;bl属性为红色输出
       mov bh,0           ;显示页为0
       mov cx,1           ;显示字符个数为1个
       mov ah,09h
       int 10h            ;输出属性为bl的字符
       mov ah,03h
       int 10h            ;读光标位置
       inc dl              ;输出列+1
       mov ah,02h
       int 10h            ;置光标位置
    L12:
      pop cx
      loop L9
      lea dx,crlf        ;输出后,回车换行
      mov ah,09
      int 21h
      
      ret
    codes ends
    end start
    ;----------------------202051814:29:33----------------
    

    希望大家不吝赐教,在下面支出我的错误,谢谢

    展开全文
  • 从数据段NUM单元开始存有9个有符号数,编写一个程序实现:找出最小值存放到数据段MIN单元,并将负数的个数以十进制数的形式显示在屏幕上,并同时输出负数。 程序清单 ;.586 DATA SEGMENT USE16 NUM DB 2,45,-33,4...

    题目

    从数据段NUM单元开始存有9个有符号数,编写一个程序实现:找出最小值存放到数据段MIN单元,并将负数的个数以十进制数的形式显示在屏幕上,并同时输出负数。

    程序清单

     ;.586
    DATA SEGMENT USE16
    NUM DB 2,45,-33,4,-2,5,-8,0,9
    MIN DB ?
    DATA ENDS
    
    CODE SEGMENT USE16
        ASSUME CS:CODE,DS:DATA
    START:
        MOV AX,DATA
        MOV DS,AX
        MOV BX,OFFSET NUM  ;加上 USE16 就不报错
        ;LEA BX,NUM  ;取 NUM 的偏移地址
        MOV CX,9
        MOV DL,0
        MOV AL,BYTE PTR [BX]  ;放MIN
        MOV MIN,AL
        
    LAST:
        CMP [BX],AL  ;比较MIN
        JGE NEXT1  ;有符号数大于等于跳 NEXT1
        MOV AL,[BX]
    NEXT1:
        CMP BYTE PTR [BX],0   ;比较负数
        JGE NEXT2
        INC DL
    NEXT2:
        INC BX
        LOOP LAST
        MOV MIN,AL
        ADD DL,30H  ;输出负数的十进制个数
        MOV AH,2
        INT 21H
        MOV AH,2
        MOV DL,0AH  ;换行
        INT 21H
        ;负数取整
        CMP MIN,0
        JGE AGAIN
        MOV AH,02H  ;输出负号
        MOV DL,2DH
        INT 21H
        NEG MIN
        
    AGAIN:
        MOV AX,WORD PTR MIN
        MOV BX,10  ;除数10→BX
        MOV CX,0   ;计数初值0→CX
    AGAIN1:
        MOV DX,0   ;0→DX
        DIV BX     ;商→AX,余数→DX
        PUSH DX    ;余数压栈
        INC CX     ;统计除法的次数
        CMP AX,0
        JNZ AGAIN1  ;商不为0转
    
    AGA:
        POP DX      ;余数→DX
        ADD DL,30H
        MOV AH,2
        INT 21H
        LOOP AGA
        MOV AH,4CH
        INT 21H
    CODE ENDS
    END START
    

    实验结果

    统计出共有3个负数。最小数为-33,用十进制输出。
    在这里插入图片描述

    展开全文
  • 有个sum变量类型dword 本来想用除10压栈法 但是必须用到eax 最基本的MOV EAX,0 都编译报错:Undefined symbol:EAX 尝试标注.386,生成失败 学校作业不能随意换软件 求大神指导! ...
  • 1 code segment 2 assume cs:code 3 strart: 4 mov ax ,1234 ;将要输出的数字 5 or ax , ax 6 jz zero 7 mov bx , -1 ...
  • 用java数行搞定的程序,用汇编要100多行。。。 而且还不支持异常处理,崩溃啊。。。 不过对于汇编基本的数据处理啥的还是有帮助的, 上程序,win32汇编 .model small .586p .data ...
  • 汇编如何以十进制输出一个32位整数
  • 算法思路: 除10取余法  循环除以10D,余数压入栈,商接着进行除10D。直到商为0为止。 代码(有效): stack_area segment  db 60h dup(?)  top label word stack_area ends ... assume cs:prona
  • 十进制输入一个数 然后以二进制的形式存储 再以十进制的形式输出
  • 从键盘随意输入两十进制数,再十六进制输出
  • 进制输出 %x 十六进制输出 代码示例 #include<iostream> using namespace std; int main(){ int a; scanf("%d",&a); printf("原始数据:%d \n",a); printf("进制输出:%o \n...
  • #include //分别以十进制、八进制和十六进制输出一个字符的ASCII int main() { char n; scanf("%c",&n); printf("十进制为%d\n八进制为%o\n十六进制为%x",n,n,n); return 0; }
  • 将一个十进制进制输出。 原理,利用位运算按位与:&。二进制中每一位与1按位与,所得的结果都是这个数。#include <stdio.h>int main(int argc, const char * argv[]) { // 提示输入 int num; printf("请...
  • 把内存中的十进制数以十进制输出到屏幕上。 【正确答案以及分析】: DATAS SEGMENT dw 126,132,1,8,3,38 DATAS ENDS STACKS SEGMENT db 40 dup(0) STACKS ENDS ;把内存中的十进制数以十进制输出到屏幕上 ...
  • !... 输出temp数组,十进制结果 ...我知道二进制使用IEEE754标准,但这也完全对不上,顺带使用cout语句,数组前三个数分别为0,4e-8,8e-8,似乎和十进制输出对上了,那IEEE754标准的二进制为什么完全不是这个结果?
  • C语言实现 八进制转换为十进制输出 八进制由 0~7 八个数字组成 0开头(注意是数字 0,不是字母 o, 例如 int a = 015; //换算成十进制为 13; #define VAL 0015 宏定义 VAL 为8进制数,目的是转VAL 为十进制 15 ...
  • 编程实现:把十进制数(long型)分别二进制和十六进制形式输出,不能使用printf系列。实现了unsigned long型的转换。// 十进制转换为二进制,十进制数的每1bit转换为二进制的1位数字char *int_to_bin(unsigned long ...
  • 这里规定最多输五位的十进制数 L3:  MOV AH,9  LEA DX,CRLF ;回车换行  INT 21H    MOV CX,16 L5: XOR DX,DX  SHL BX,1  ADC DL,0  AND DL,1  OR DL,30H    MOV AH,2  INT 21H  LOOP L5 L2:MOV...
  • 输出16位二进制数 disp: mov dl,0  rol bx,1 ;循环左移一位,最高位到最右  rcl dl,1 ;带进位循环左移一位   or dl,30h ;or 00000000,00110000b dl='0' ???????????????   ...
  • eg:输入26输出a1;输入-1输出ffffffff 直接上代码,有注释 #include<stdio.h> void Conversion(unsigned int n , char *str)//直接将num转化未unsigned类型,可以保证 { //负数的正确输出 int i =...
  • C语言中实现十进制转二进制输出

    万次阅读 多人点赞 2019-05-17 15:30:28
    众所周知,C中八进制,十进制和十六进制都可以通过%o,%d和%x轻松实现,然而唯独没有提供二进制输出的快速方式。 方法一:itoa函数 itoa函数将数值转换为字符串,通过规定转换进制实现。 #include<stdio.h&...
  • #include using namespace std; int main() { int a,b,setw();  cin>>a>>b; cout cout return 0; }
  •  编写递归函数,实现将一个十进制的正整数二进制的形式输出。  注:不考虑符号位,仅从二进制数不为0的最高位开始输出。 输入格式  一个十进制正整数 输出格式  该整数对应的二进制数 样例输入 一个满足题目...
  • 编写递归函数,实现将一个十进制的正整数二进制的形式输出。  注:不考虑符号位,仅从二进制数不为0的最高位开始输出。  (测试案例,十进制:96,对应二进制:1100000) 代码 package 算法训练; import java....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,755
精华内容 1,102
关键字:

以十进制输出