当前位置:首页 » 编程语言 » 用c语言实现异或门计算仿真实验
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

用c语言实现异或门计算仿真实验

发布时间: 2022-04-15 15:14:46

c语言 异或运算

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
FILE *p1,*p2;
char ch,n;
p1=fopen("D:\\源文件.txt","r");
p2=fopen("D:\\目标文件.txt","w");
if(p1==NULL||p2==NULL)
{
printf("文件打开失败\n");
exit(0);
}
printf("请输入密钥,并牢记,解密时要再次输入:");//只要再对加密的文件再进行一次异或运算就得到源文件
n=getch();
printf("*\n");
while(1)
{
ch=fgetc(p1);
if(ch==EOF)
break;
ch=ch^n;
fputc(ch,p2);
fflush(p2);
}
fclose(p1);
fclose(p2);
return 0;
}

Ⅱ 请帮我讲解一下C语言中的异或运算

首先,我们看一下异或的原理:
a = 3 ^ 5;
3的二进制是0011,5的二进制是0101。异或发现两者的不同之处,所以a最终为0110b(4)。
了解了异或的基本原理后,接下来看上述的代码。
a^=b;
这一句使得a被赋值为“数值a”与“数值b”的“差异值”。
然后:b^=a;
这一句用异或利用“差异值”来还原a的数值,并赋值给b。此时b等于a先前的数值。
最后一句:a^=b;
因为a仍然保存着“差异值”,这一句通过异或使得b的初始值被还原,并赋值给a。
。。。。。
这样,异或就将a与b的数值“巧妙”地交换了……
我也是网络的,和楼主一起学习…………

Ⅲ c语言异或操作

c语言异或加密实现的原理为,将任意值,与相同值两次异或后,结果与原值相同。所以可以通过将源数据与一个固定的值(秘钥key)异或后,得到密文,然后将密文再次与秘钥异或,得到原文。这样就实现了异或加密及解密。
c语言中的异或是一种按位操作的计算,其计算原理为,操作数对应位上的值相同,则结果位上值为0,否则为1.异或的运算符号为^,于是真值表如下:
0^0=0
0^1=1
1^0=1
1^1=0
这样区分源数据和秘钥值,有如下四种可能:
0^0=0
0^0=0
0^1=1
1^1=0
1^0=1
1^0=1
1^1=0
0^1=1
以上是将一个值,用另一个值连续异或两次后的计算过程,可以看到,最终的值与原始值是相同的。这就是异或加密的基础原理。

Ⅳ 怎么使用C语言实现用用二进制码与数据求与,或,异或运算

1. 想让一个变量等于0000..01直接给赋值1就可以。想让它等于11111..1直接赋值-1就可以,也可以赋值~(0)。

2. 不用非要与1111..1求与,如果1那一位移出的话直接就变成0了。

3. 如果不是为了练习的话,检测本地系统的数据长度直接用关键字sizeof就可以,不用写程序。

Ⅳ 如何用C语言实现两个16进制数的异或

C语言中,异或运算符是^。
不管运算对象是10进制的数还是16进制的数(或其他进制的数),进行^运算时,都是将运算对象转换为二进制,按位进行异或运算。

举例说明如下:
int a=0x9a, b=0x56;
int c = a^b; // 将a和b进行异或运算
运算过程是
a = 1001 1010 // 0x9a
b = 0101 0110 // 0x56
c = 1100 1100 // 0xcc (对应的二进制位进行异或运算)

输出的时候可以按16进制输出,如:
printf("%x", c);

Ⅵ 急:如何编程实现逻辑“与”“异或”运算

逻辑或 异或
真值表 a||b a&b
a=1,b=1 1 0
a=1,b=0 1 1
a=0,b=1 1 1
a=0,b=0 0 0

“按位与”运算符(&)

00000011(2)
&00000101(2)
00000001(2)
由此可知3&5=1
c语言代码:
#include <stdio.h>
main()
{
int a=3;
int b = 5;
printf("%d",a&b);
}

“异或”运算符(^)
他的规则是:若参加运算的两个二进制位值相同则为0,否则为1
即0∧0=0,0∧1=1,1∧0=1, 1∧1=0
例: 00111001
∧ 00101010
00010011
c语言源代码:
#include <stdio.h>
main()
{
int a=071;
int b = 052;
printf("%d",a^b);
}

更多的自己看

Ⅶ C语言的异或运算

机内码(补码):
23: 00000000,00010111
2: 00000000,00000010
5: 00000000,00000101

异或优先级高,先算异或,再算位或

2^5,2与5异或,异或的法则是相同的为0,不同的为1,由上面的二进制很明显结果为:00000000,00000111
再算位或,23与此结果求或,很显然仍然为:00000000,00010111 即结果是23。

Ⅷ C语言 异或 运算符的使用

异或的意思就是相异为真。。
现在问题主要是出现在这一句。。
b[--i]=a[j]^a[--j];
注意啦。。编译器编译的时候是从后向前的。。也就是先算a[--j],这样j就先自减了。。j从3变为2。。然后再算a[j],因为j是2,调用的时候,就是调a[2]
所以整个语句第一次执行的时候就是b[2]=a[2]^a[2],结果显然是0;
所以输出的是1100。。
有什么地方解释不清的可以再问我。。嘿嘿。。

Ⅸ c语言异或运算怎么算

所谓异或就是不进位的加法,用二进制表示来异或很容易理解。