在C语言中给二进制数加一?

在C语言中给二进制数加一?,c,binary,C,Binary,我有一个9位的二进制字符串,比如“11111 0000”,我该如何向这个二进制数加1 我不是指串联(即在添加1后,字符串应为“11111 0001”) 这适用于任何9位二进制字符串 此代码是2的补语转换器的一部分 我做这件事已经有一段时间了,完全不知所措。如有任何帮助,我们将不胜感激。以下是我根据rici在评论中所说的实施: #include <stdio.h> #include <string.h> #define SIZE 9 char const flip[] =

我有一个9位的二进制字符串,比如“11111 0000”,我该如何向这个二进制数加1

我不是指串联(即在添加1后,字符串应为“11111 0001”)

这适用于任何9位二进制字符串

此代码是2的补语转换器的一部分


我做这件事已经有一段时间了,完全不知所措。如有任何帮助,我们将不胜感激。

以下是我根据rici在评论中所说的实施:

#include <stdio.h>
#include <string.h>

#define SIZE 9
char const flip[] = "10"; // flip[0]='1' flip[1]='0'

main()
{

   char str[SIZE+1] = "111110100"; // as in your example
   str[SIZE] = '\0';   
   printf("number to add '1' : %s\n", str);

   int index = SIZE-1;

   while(index >= 0)  // bit by bit from right to left
   {
       str[index] = flip[str[index] -'0']; //flip bit

       if(str[index] == '1') // if bit flips to '1' addition is done
       {
           printf("result: %s\n", str);
           return 0;
       }

       if(index ==0 ) // processed all bits still didn't finish ==> ?
       {
           printf("overflow!! \n");
           return 0;
       }
       index--;
   }


}
#包括
#包括
#定义尺寸9
字符常量翻转[]=“10”//翻转[0]=“1”翻转[1]=“0”
main()
{
char str[SIZE+1]=“11111 0100”;//如您的示例所示
str[SIZE]='\0';
printf(“添加'1'的编号:%s\n”,str);
int索引=大小-1;
while(index>=0)//从右到左逐位
{
str[index]=flip[str[index]-'0'];//翻转位
if(str[index]=“1”)//如果位翻转到“1”,则完成加法
{
printf(“结果:%s\n”,str);
返回0;
}
if(index==0)//处理的所有位仍然没有完成==>?
{
printf(“溢出!!\n”);
返回0;
}
索引--;
}
}
更新

#include <stdio.h>
#include <string.h>
#define SIZE 9
char const flip[] = "10";
int main()
{
   int index = SIZE;
   char in[SIZE+1] = "111110100", out[SIZE+2] = "0";
   strcat(out, in);
   while(index >= 0)
   {
       out[index] = flip[out[index] -'0'];
       if(out[index] == '1') break;
       index--;
   }
   printf("result %s\n", out);
}
#包括
#包括
#定义尺寸9
字符常量翻转[]=“10”;
int main()
{
int索引=大小;
[SIZE+1]=“111110100”中的字符,[SIZE+2]=“0”中的字符;
strcat(输出、输入);
而(索引>=0)
{
out[index]=翻转[out[index]-'0'];
如果(out[index]=“1”)中断;
索引--;
}
printf(“结果%s\n”,输出);
}

您的意思是说您有一个二进制数的字符表示,并且希望对该数字执行算术运算,而不将表示转换为内部二进制,而是对字符表示进行操作?查找“全加器”作为电子电路设计。不要实现自己的全加器。对于9位,只需将其转换为
int
,然后再转换回来。假设Hot-Licks正确地回答了问题,则从右向左扫描,翻转位,直到刚刚翻转的位变成“1”。用铅笔和纸试试看它是如何工作的。应该是
char str[SIZE+1]
Why@BLUEPIXY?我需要一个9个字符的字符串,而不是10
printf(“结果:%s\n”,str)无法正常工作。因为必须以NUL字符结尾。@BLUEPIXY我明白了,请参见编辑,可以吗?我希望OP是物有所值的+1代表坚持!