将负数添加到C中的无符号短字符

将负数添加到C中的无符号短字符,c,binary,hex,twos-complement,negative-number,C,Binary,Hex,Twos Complement,Negative Number,基本上我是用C编写代码,将一些lc-3指令从文本文件转换成二进制,然后以十六进制输出。我已经到了需要加一个十进制数的地步。我对正数没有问题,但我不知道如何处理负数。我意识到我将不得不转换为2的补充,但我不知道如何去做,因为我是非常新的C。任何建议或提示将不胜感激。为我的代码格式错误提前道歉。没有很好的编辑经验 #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) {

基本上我是用C编写代码,将一些lc-3指令从文本文件转换成二进制,然后以十六进制输出。我已经到了需要加一个十进制数的地步。我对正数没有问题,但我不知道如何处理负数。我意识到我将不得不转换为2的补充,但我不知道如何去做,因为我是非常新的C。任何建议或提示将不胜感激。为我的代码格式错误提前道歉。没有很好的编辑经验

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
        char line[40];
        unsigned short bin;
        char operator[10], destination[10], source1[10], source2[10];

        FILE *file; if((file = fopen(argv[1], "r")) == NULL)
        {
                printf("IO Error, please specify a file\n");

        }
        else{
        FILE *file = fopen(argv[1], "r");
        while(fgets(line, 40, file) != NULL){
        sscanf(line, "%s %[^,],%[^,],%s",operator,destination,source1,source2);
        if(strcmp(operator,"add")==0){
                bin = 0b0001000000000000;
        }
        if(strcmp(operator,"and")==0){
                bin = 0b0101000000000000;
        }
        bin+=(destination[1]-'0') * 0b1000000000;
        bin+=(source1[1]-'0') * 0b1000000;
        char *dec=strstr(source2,"r");
        if (dec){
        bin+=(source2[1] - '0');
        }
        else{

        bin+=0b100000;
        int source2Dec ;
        sscanf(source2,"%d",&source2Dec);
        bin+=(source2Dec);
        }

        printf("%x\n", bin);
        }
        }
       }
#包括
#包括
int main(int argc,char*argv[]){
字符行[40];
无符号短仓;
字符运算符[10],目的地[10],源1[10],源2[10];
FILE*FILE;if((FILE=fopen(argv[1],“r”))==NULL)
{
printf(“IO错误,请指定一个文件\n”);
}
否则{
FILE*FILE=fopen(argv[1],“r”);
while(fgets(第40行,文件)!=NULL){
sscanf(行,“%s%[^,]”、“%s%[^,]”、%s”,运算符、目标、源1、源2);
if(strcmp(运算符,“add”)==0){
bin=0B0001000000000000000000;
}
if(strcmp(运算符“and”)==0){
bin=0b0101000000000000;
}
bin+=(目的地[1]-'0')*0b1000000000;
bin+=(source1[1]-'0')*0b1000000;
char*dec=strstrstr(source2,“r”);
国际单项体育联合会(12月){
bin+=(source2[1]-“0”);
}
否则{
bin+=0b100000;
int source2Dec;
sscanf(源2、%d、&source2Dec);
bin+=(source2Dec);
}
printf(“%x\n”,bin);
}
}
}

欢迎来到StackOverflow!请记住,您可以在编辑器的预览窗口中看到您的文章的外观。简单地说,您只需将第4行字符向右偏移即可将其视为代码。关于你的问题:你到底想做什么?为什么?我想弄清楚。很抱歉,我希望它仍然清晰可辨。基本上是把lc-3指令转换成十六进制。对于这一部分,我需要使它能够处理小数,这样它就可以处理如下指令:加r6,r7,-9,但我不知道如何用二进制处理-9。正数很好用,但我想我需要用2的补码做点什么,让负数发挥作用。事实上,你的问题是?,不。问题是我需要用十六进制表示二进制。我需要把-9转换成二进制,然后用2的补码。我可以在二进制中得到9,但是我需要翻转位,加1得到-9。我不知道如何在C语言中完成这个过程。很抱歉造成混乱。你似乎把事情搞混了<代码>无符号整数类型具有内部二进制表示,但这并不意味着您必须使用二进制常量来计算它们。如果您希望将
-9
表示为2的补码,并将其打印为十六进制,只需将其分配给一个
无符号短字符(这会为您完成所有算术运算),然后以
%hx
格式打印即可