二进制有符号数补码计算器

二进制有符号数补码计算器这里写自定义目录标题起因运行结果 Codeattentio 起因 Modelsim 中的结果是以十六进制有符号数的形式给出的 不方便观察 所以想把它转成十进制数 然而没有找到合适的工具 无奈自己用 C 语言写了一个 运行结果 Code include stdio h include stdlib h include string h char fun charch charstr1 1234 intmain int string h stdlib h stdio h

这里写自定义目录标题

起因

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

运行结果

在这里插入图片描述

Code

#include  
     #include  
     #include  
     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'; else reverse[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

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


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




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177244.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:58
下一篇 2026年3月26日 下午7:58


相关推荐

  • Eureka&CAP原理

    Eureka&CAP原理CAP原则(CAP定理):CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性),三者不可得兼。CAP原则是NOSQL数据库的基石。Consistency(一致性)。Availability(可用性)。Partitiontolerance(分区容错性)。分布式系

    2022年5月19日
    49
  • PetaLinux学习笔记 1

    PetaLinux学习笔记 1迟迟没有做底板,所以只能把Linux写到FLASH上了。还好这个FLASH够大。官方所说的有点问题,最后一句改成petalinux-package–boot–fsbl~/FTP_Folder/ax_peta/images/linux/zynq_fsbl.elf–fpga–u-boot–kernel–force再烧进去就可以跑了。手册ug821有说明,先搞清楚它…

    2025年11月1日
    6
  • 手眼标定的两种方式

    手眼标定的两种方式最近在学习手眼标定,做下笔记,和大家分享下学习经历:一手眼标定的两种情形首先讲一下在工业应用中,手和眼(摄像机)的两种位置关系,第一种是将摄像机(眼)固定在机械手(手)上面,眼随手移动;第二种是摄像机(眼)和机械手(手)分离,眼的位置相对于手是固定的,下面用网上的两张图来说明下:第一种情况:相机移动第二种情况:相机固定从上面两副示意图可以看出,第一种情况中我们

    2022年4月30日
    51
  • 如何从零开始学android?

    如何从零开始学android?不知不觉进入软件开发这一行业已经8年了,回想起刚毕业在深圳一个月拿着2000的工资,还要在休息时间自学android,感觉那段时光真的是大学毕业后最充实的一段时光了;努力总会有结果的,第二年涨到5000,第三年跳槽回郑州给了我7500,主要是离家近,父母年纪大了,给的钱少点无所谓,起码能经常回家看看。回忆到此结束,之前看到有人在悟空问答提问怎么从零开始学android这个问题,但是限于爪机无力…

    2022年6月13日
    36
  • MidJourney本地部署

    MidJourney本地部署

    2026年3月15日
    3
  • 网易有灵智能体开启邀测:Agent 时代,清晰定义问题才是稀缺生产力

    网易有灵智能体开启邀测:Agent 时代,清晰定义问题才是稀缺生产力

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号