C语言大二进制的与 或 非操作怎么用代码编写 返回结果是字符串
发布网友
发布时间:2022-06-03 05:49
我来回答
共2个回答
热心网友
时间:2023-10-12 18:17
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *or(char *ch1,char *ch2,int isr)
/*
ch1和ch2是要参与or运算的两个操作数,isr用于确定运算结果的保存位置,若为0则通过malloc()
函数分配新的空间保存结果,若为非0值则结果将覆盖掉ch1和ch2中较长的那一个
*/
{
char *ort=NULL,*pl,*ps;
int i=0;
size_t len;
if (strlen(ch1)>=strlen(ch2)) {
pl=ch1;
ps=ch2;
}
else
{
pl=ch2;
ps=ch1;
}
i=(len=strlen(pl))-strlen(ps);
if (isr) {
ort=pl;
for (pl+=i;*pl;pl++,ps++) {
*pl=*pl=='1'||*ps=='1'?'1':'0';
}
}
else
{
if((ort=malloc((len+1)*sizeof(char)))==NULL) return NULL;
strncpy(ort,pl,i);
for (pl+=i; *pl; pl++,ps++)
{
ort[i++]=*pl=='1'||*ps=='1'?'1':'0';
}
ort[i]='\0';
}
return ort;
}
char *not(char *ch,int isr)
/*
ch是要参与not运算的操作数,isr用于确定运算结果的保存位置,若为0则通过malloc()
函数分配新的空间保存结果,若为非0值则结果将覆盖掉ch
*/
{
int i;
char *ort;
if (!isr) {
if ((ort=calloc(strlen(ch)+1,sizeof(char)))==NULL) return NULL;
for (i = 0; ch[i]; i++) ort[i]=ch[i]=='1'?'0':'1';
}
else
for (ort=ch,i = 0; ch[i]; i++) {
ch[i]=ch[i]=='1'?'0':'1';
}
return ort;
}
int main(int argc, char* argv[])
{
char a[]="101010",b[]="10101",*p;
puts(or(a,b,1));
puts(not(b,1));
return 0;
}
追问非常感谢,写的非常好,还有与操作我还不是很懂,你能继续帮我编写下吗?
热心网友
时间:2023-10-12 18:18
按位取或 | (键盘上右斜线上面那个断开的竖线)
按位取与 &
按位取非 ~ (键盘上波浪线,在数字1前面那个)