这里写自定义目录标题

  • 起因
  • 运行结果
  • Code
  • attention

起因

Modelsim中的结果是以十六进制有符号数的形式给出的,不方便观察,所以想把它转成十进制数,然而没有找到合适的工具,无奈自己用C语言写了一个。

运行结果

Code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* fun(char ch);char str1[] = "1234";int main()
{int width = 16;char hex[] = "ffffffff";char *complement;char *t_complement;char *reverse;char *original;int B_num = 0;int data = 0;int scanf_len = 0;int i;while(1){printf("\n请输入宽度:");scanf("%d", &width);printf("\n请输入十六进制数:");scanf_len = scanf("%s", hex);B_num = (width+3)/4;if( strlen(hex)!= B_num){printf("!!!输入错误!!!");exit(0);}else{printf("十六进制数:%s\n", hex);}complement = (char*)malloc((B_num*4+5)*sizeof(char));memset(complement, 0, sizeof(complement));t_complement = (char*)malloc((width+5)*sizeof(char));memset(t_complement, 0, sizeof(t_complement));reverse = (char*)malloc((width+5)*sizeof(char));memset(reverse, 0, sizeof(reverse));original = (char*)malloc((width+5)*sizeof(char));memset(original, 0, sizeof(original));for(i=0; i<B_num; i++){// ????????¡ã¨¦????????????????????¨¦????¡ã????????????memcpy(complement+4*i, fun(hex[i]), 4);}complement[B_num*4] = '\0';for(i=0; i<width; i++){t_complement[i] = complement[i+(B_num*4-width)];}t_complement[width] = 0;if(t_complement[0] == '1'){//    ?¡¦????complement???¨¦??????????????for(i=0+(B_num*4-width); i<B_num*4; i++){if(i == (B_num*4-width))reverse[i-(B_num*4-width)] = complement[i];else if(complement[i] == '1')reverse[i-(B_num*4-width)] = '0';elsereverse[i-(B_num*4-width)] = '1';}reverse[width] = 0;char carry = 1;//  ?¡¦????complement???¨¦??????????????for(i=width-1; i>=0; i--){if(i == 0)original[i] = reverse[i];else if(carry == 1){if(reverse[i] == '1'){original[i] = '0';carry = 1;}else{original[i] = '1';carry = 0;}}else{if(reverse[i] == '1'){original[i] = '1';}else{original[i] = '0';}}}original[width] = 0;}else{memcpy(reverse, t_complement, width);memcpy(original, t_complement, width);}int base = 1;for(i=width-1; i>=0; i--){if(i == 0){if(original[i] == '1')data *= -1;}else{data = data + (original[i]-'0')*base;base *= 2;}}// printf("%d %d %d", sizeof(int), sizeof(long int), sizeof(long long int));printf("原码:%s\n", complement);printf("原码:%s\n", t_complement);printf("反码:%s\n", reverse);printf("补码:%s\n", original);printf("十进制数:%d\n", data);printf("=================================================\n\n");}return 0;
}char* fun(char ch)
{switch(ch){case '0':memcpy(str1, "0000", 4);break;case '1':memcpy(str1, "0001", 4);break;case '2':memcpy(str1, "0010", 4);break;case '3':memcpy(str1, "0011", 4);break;case '4':memcpy(str1, "0100", 4);break;case '5':memcpy(str1, "0101", 4);break;case '6':memcpy(str1, "0110", 4);break;case '7':memcpy(str1, "0111", 4);break;case '8':memcpy(str1, "1000", 4);break;case '9':memcpy(str1, "1001", 4);break;case 'a':case 'A':memcpy(str1, "1010", 4);break;case 'b':case 'B':memcpy(str1, "1011", 4);break;case 'c':case 'C':memcpy(str1, "1100", 4);break;case 'd':case 'D':memcpy(str1, "1101", 4);break;case 'e':case 'E':memcpy(str1, "1110", 4);break;case 'f':case 'F':memcpy(str1, "1111", 4);break;default:printf("???????????¨ª?¨®??????\n");exit(0);break;}return str1;
}

attention

如果输入的宽度和字符串不匹配会自动结束程序。


都看到这儿了,点个赞呗
||
\/

二进制有符号数补码计算器相关推荐

  1. 计算机有符号数为什么采用补码表示

    两个原因: 1. cpu对二进制采用基本的加减法,比如以下两个有符号数相加,如果采用补码的方式: (+10)  00001010   +(-20)11101100 ------------------ ...

  2. (符号数)二进制乘法(从补码讲起)

    1.为什么补码可以用来转换加减法: 因为补码的符号位是参与运算的,而原码和反码的符号为只是标识位: e.g. (2-3)的补码 = (2)的补码+(-3)的补码=010 + 101 = 111 = - ...

  3. 二进制补码计算——有符号数的乘法

    位数问题 a_width位的a,乘以B_width位的b,结果的位数是A_width + B_width. 定点小数问题 小数位数等于a的小数位数,加上b的小数位数之和. 补码相乘问题 补码 * 补码 ...

  4. 有符号数和无符号数详解(2)补码详解

    有符号数和无符号数详解(2)补码详解 1. 为什么需要补码 1.1 背景 2 补码的思想 2.1 我们希望只设计加法运算器,不用减法运算器. 2.2 现在问题是:怎么表示-1呢? 3. 补码 3.1 ...

  5. 无符号数、有符号数、补码在汇编中的运用及相关注意事项

    1.原码.反码.补码知识的复习: 三者的最高位均为符号位.我以前一直没弄明白的是为何8位补码的表示范围是-128~127,今天查阅了相关资料,于此记下. 仍然以8位为例: 原码的表示范围:-127~- ...

  6. c语言中有符号数的补码,[分享]带符号数的表示-----补码

    [分享]带符号数的表示-----补码 补 码 表 示 由于原码表示中0的表示形式的不唯一和原码加减运算的不方便,造成实现原码加减运算的硬件比较复杂.为了简化运算 让符号位也作为数值的一部分参加运算,并 ...

  7. 微机原理有符号数的真值与补码间的转换

    有符号数的真值与补码间的转换 之前上课的时候一直没怎么弄清有符号数的真值与补码间怎么转换的,老师上课只讲了一下公式怎么用,但也没详细说是怎么来的,后来我想了一下,也差不多弄懂了. 为什么这里只讲有符号 ...

  8. 计算机组成原理——有符号数的原码、反码、补码、移码

    目录 原码 浮点数和定点数 无符号数/有符号数的定点表示 原码 反码 补码 作用 移码 作用 原码 浮点数和定点数 定点数:小数点的位置固定 如:13.24                   --常 ...

  9. 计算机有符号数加法,有符号数的表示法、加减法、补码

    有符号数的表示法.加减法.补码 摘要:本文将会说明有符号数的表示方法,有符号数正负数之间的跳变,有符号负数的加减法,为什么采用补码等方面进行分析. 我是学过计算机原理的,也有有符号数和无符号数的概念, ...

最新文章

  1. 技术图文:Numpy 一维数组 VS. Pandas Series
  2. 查表法的CRC8和CRC16程序
  3. 扩展js string 方法
  4. 暴富、投机,金钱、欲望、人性,一个叫 Fomo3D的游戏正在刷新你的世界观
  5. 退回余款退回银行会计分录
  6. Spring Boot解决跨域问题
  7. 卷积云神经网络_2018.10
  8. 7-45 航空公司VIP客户查询 (25 分)(思路+详解+map用法解释+超时解决)兄弟们来呀冲压呀呀呀呀
  9. Android之Bitmap高效缓存以及android缓存策略
  10. python编程 迷你世界_迷你编程下载-迷你世界迷你编程下载 v1.0官方版--pc6下载站...
  11. HTML期末作业-中国足球网页
  12. php:修改目录下文档权限(777,644 )
  13. java7 文件_Java SE 7新特性之文件操作(9) - 遍历目录树
  14. 如何补充策略与模型在风控中的滞后性
  15. mysqld.exe
  16. SAS 9.4 破解时间限制
  17. Office机器人2.1.763.557(Excel批量打印 Word批量打印 批量加密 批量解密 批量转换格式)...
  18. iOS逆向专栏总目录(持续更新)
  19. imitate wechat - 4
  20. 有没有免费又好用的云桌面系统?

热门文章

  1. 2020-12-12
  2. 解决-使用html2canvas截取页面时,页面的div背景图无法截取并跨域
  3. winfrom 实现条形码批量打印以及将条形码信息生成PDF文件
  4. PyTorch 2.0 重磅发布:一行代码提速 30%
  5. Python练习——L1-051 打折 (5分)
  6. 阅读和了解什么是形式化方法?
  7. 芒果改进目录一览|原创改进YOLOv5、YOLOv7等YOLO模型全系列目录 | 人工智能专家唐宇迪老师联袂推荐
  8. 大数据给物流带来了什么?
  9. linux查看服务器带宽
  10. 深入MTK平台bootloader启动之【 Pre-loader -> Lk】分析笔记