C语言 二进制 习题。。。求救。。输入两个二进制数,取反,与,或,异或。。显示结果。。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 32
char *extend(char *,char *);
char *reverse(char *,char *);
char *And(char *,char *,char *);
char *Or(char *,char *,char *);
char *orand(char *,char *,char *);
int main(int argc,char *argv[])
{
if(argc!=3)
{
puts("Wrong");
exit(1);
}
char x[M],y[M],z[M];
printf(" x=%s\n", extend(x,argv[1]));
printf(" y=%s\n", extend(y,argv[2]));
printf(" ~x=%s\n", reverse(z,x));
printf(" ~y=%s\n", reverse(z,y));
printf(" x&y=%s\n", And(z,x,y));
printf(" x|y=%s\n", Or(z,x,y));
printf(" x^y=%s\n", orand(z,x,y));
return 0;
}
char *extend(char *fd,char *fs)
{
int i;
for(i=0;i<=M-strlen(fs);i++)
fd[i]='0';
fd[i]='\0';
strcat(fd,fs);
return fd;
}
char *reverse(char *fd,char *fs)
{
char *save=fd;
strcpy(fd,fs);
while(*fd!='\0')
{
if(*fd=='0')
*fd='1';
else
*fd='0';
fd++;
}
return save;
}
char *And(char *fd,char *fs1,char *fs2)
{
char *save=fd;
while(*fs1!='\0')
{
if(*fs1=='1'&&*fs2=='1')
*fd='1';
else
*fd='0';
fs1++;
fs2++;
fd++;
}
return save;
}
char *Or(char *fd,char *fs1,char *fs2)
{
char *save=fd;
while(*fs1!='\0')
{
if(*fs1=='0'&&*fs2=='0')
*fd='0';
else
*fd='1';
fs1++;
fs2++;
fd++;
}
return save;
}
char *orand(char *fd,char *fs1,char *fs2)
{
char *save=fd;
while(*fs1!='\0')
{
if(*fs1!=*fs2)
*fd='1';
else
*fd='0';
fs1++;
fs2++;
fd++;
}
return save;
}

第1个回答  2012-04-23
这个基本上已经写好了。
修改如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 33
char *extend(char *,char *);
char *reverse(char *,char *);
char *And(char *,char *,char *);
char *Or(char *,char *,char *);
char *orand(char *,char *,char *);
int main(int argc,char *argv[])
{
char x[M],y[M],z[M];

if(argc!=3)
{
puts("Wrong");
exit(1);
}

printf(" x=%s\n", extend(x,argv[1]));
printf(" y=%s\n", extend(y,argv[2]));
printf(" ~x=%s\n", reverse(z,x));
printf(" ~y=%s\n", reverse(z,y));
printf(" x&y=%s\n", And(z,x,y));
printf(" x|y=%s\n", Or(z,x,y));
printf(" x^y=%s\n", orand(z,x,y));

return 0;
}
char *extend(char *fd,char *fs)
{
int i;
for(i=0;i<M-strlen(fs)-1;i++)
fd[i]='0';
fd[i]='\0';
strcat(fd,fs);
return fd;
}
char *reverse(char *fd,char *fs)
{
char *save=fd;
strcpy(fd,fs);
while(*fd!='\0')
{
if(*fd=='0')
*fd='1';
else
*fd='0';
fd++;
}
return save;
}
char *And(char *fd,char *fs1,char *fs2)
{
char *save=fd;
while(*fs1!='\0')
{
if(*fs1=='1'&&*fs2=='1')
*fd='1';
else
*fd='0';
fs1++;
fs2++;
fd++;
}
return save;
}
char *Or(char *fd,char *fs1,char *fs2)
{
char *save=fd;
while(*fs1!='\0')
{
if(*fs1=='0'&&*fs2=='0')
*fd='0';
else
*fd='1';
fs1++;
fs2++;
fd++;
}
return save;
}
char *orand(char *fd,char *fs1,char *fs2)
{
char *save=fd;
while(*fs1!='\0')
{
if(*fs1!=*fs2)
*fd='1';
else
*fd='0';
fs1++;
fs2++;
fd++;
}
return save;
}
你只需在DOS窗口的命令行输入即可:

如:执行程序文件名为OPT.exe
OPT 11101 10011
输出:
x=00000000000000000000000000011101
y=00000000000000000000000000010011
~x=11111111111111111111111111100010
~y=11111111111111111111111111101100
x&y=00000000000000000000000000010001
x|y=00000000000000000000000000011111
x^y=00000000000000000000000000001110

...求救。。输入两个二进制数,取反,与,或,异或。。显示结果。。_百...
printf(" x=%s\\n", extend(x,argv[1]));printf(" y=%s\\n", extend(y,argv[2]));printf(" ~x=%s\\n", reverse(z,x));printf(" ~y=%s\\n", reverse(z,y));printf(" x&y=%s\\n", And(z,x,y));printf(" x|y=%s\\n", Or(z,x,y));printf(" x^y=%s\\n"...

C语言位运算符:与、或、异或、取反、左移和右移!
C语言的世界里,隐藏着一组神秘的代码符咒——位运算符,它们分别是:&(按位与)、|(按位或)、^(按位异或)、~(取反)、<>(右移)。这些运算符,如同魔法般,让整型数据(char, short, int, long)在二进制的舞台上跃动,展示着它们独特的魔力。首先,我们来看看&(按位与):它就像一...

二进制位运算实战(2)-异或,按位或,按位与,取反
照例我们先用左位移运算制作一个"置0器",也即是先得到0x00000100。然后对0x00000100取反, 得到0x11111011。 ~(0x1 << 2(n的位置)) 如果n是1,0x00000100&0x11111011的得到的就是0x00000000,如果n是0,0x00000000|0&0x11111011的得到的还是0x00000000;总可以把位置n的值设置为0。3 总结 到...

C语言位运算符:与、或、异或、取反、左移和右移!
在C语言的世界里,位操作符犹如二进制运算的瑞士军刀,它们包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<>),在处理二进制数据时展现出了强大的威力。<\/ 按位与(&):<\/ 这个运算符如同一个精密的清零工具,通过与操作可以清零低字节或保留特定位。例如,60与17的按位与运算结...

C语言位运算符:与、或、异或、取反、左移和右移!
C语言提供了6个位操作运算符,包括按位与(&), 按位或(|), 按位异或(^), 取反(~), 左移(<<)和右移(>>),它们在处理二进制位运算时非常实用。本文将详细介绍这些运算符及其应用场景。位运算符操作如下:1. **按位与(&)**:对应二进制的逻辑与,如果两个对应位都为1,结果为1,否则为...

C语言问题,按位与、按位或、按位异或、按位取反,解释下。
取反运算,单目运算符:~1 = 0,~0 = 1;以上例子 1 代表真,0 代表假。按位运算就是将二进制位的每一位进行如上计算。如 2 | 5,转换为二进制(以 1 字节 8 位为例):00000010 | 00000101,每个二进制位分别进行或运算后得:00000111 即 7。虽然 7 = 5 + 2 但不代表 2 | 5 =...

C语言的异或运算怎么算,什么叫高四位取反,
C语言的异或运算符 (^) 用于比较两个二进制数的对应位。如果对应位不同,结果为1;如果对应位相同,则结果为0。异或运算符在编程中非常常见,尤其在数据加密、位操作和位掩码等领域。举例来说,假设我们有二进制数 1010 和 1001。这里的“高四位”指的是从最左边数起的前四个二进制位,即 1010;...

c语言中,2个数进行异或并得到一个结果,是否存在另外2个数进行异或也是这...
如果a异或b得到c,那么(a各位取反,就是a的每个二进制位的0变1,1变0,比如如果a=5,且a由占一字节空间,则a写成二进制是00000101,各位取反后变成11111010)异或(将b各位取反后的结果)也得到c

计算机二进制中的与运算和或运算分别指哪些?
结果为0;如果原数值位为0,结果为1。例如,对二进制数10001进行非运算,结果为01110。4. 异或运算(^)在二进制中,对两个数值的每一位进行“异或”操作。规则是:当两个比较的位不相同时,结果位为1;如果两个比较的位相同,结果位为0。即,只有两个条件不相同时,结果才为真。

2个16位的二进制逻辑进行逻辑运算(与,或,异或,取反)咋做
与:有0得0 或:有1得1 非:0,1互换 异或:同0异1 有什么难算的?如1001 跟1101,这两个数进行运算,与运算的结果是1001,或运算的结果是1101,异或运算的结果是0100。

相似回答