在C语言中给二进制数加一?
我有一个9位的二进制字符串,比如“11111 0000”,我该如何向这个二进制数加1 我不是指串联(即在添加1后,字符串应为“11111 0001”) 这适用于任何9位二进制字符串 此代码是2的补语转换器的一部分在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[] =
我做这件事已经有一段时间了,完全不知所措。如有任何帮助,我们将不胜感激。以下是我根据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个字符的字符串,而不是10printf(“结果:%s\n”,str)代码>无法正常工作。因为必须以NUL字符结尾。@BLUEPIXY我明白了,请参见编辑,可以吗?我希望OP是物有所值的+1代表坚持!