请问异或取反校验是什么教研方式,具体方法是什么?3
发布网友
发布时间:2023-10-31 10:31
我来回答
共2个回答
热心网友
时间:2024-11-28 20:51
xor异或运算公式
1、逻辑加法(“或”运算)
逻辑加法通常用符号“+”或“∨”来表示。逻辑加法运算规则如下:
0+0=0, 0∨0=0
0+1=1, 0∨1=1
1+0=1, 1∨0=1
1+1=1, 1∨1=1
从上式可见,逻辑加法有“或”的意义。也就是说,在给定的逻辑变量中,A或B只要有一个为1,其逻辑加的结果为1;两者都为1则逻辑加为1。
2、逻辑乘法(“与”运算)
逻辑乘法通常用符号“×”或“∧”或“·”来表示。逻辑乘法运算规则如下:
0×0=0, 0∧0=0, 0·0=0
0×1=0, 0∧1=0, 0·1=0
1×0=0, 1∧0=0, 1·0=0
1×1=1, 1∧1=1, 1·1=1
不难看出,逻辑乘法有“与”的意义。它表示只当参与运算的逻辑变量都同时取值为1时,其逻辑乘积才等于1。
3、逻辑否定(非运算)
逻辑非运算又称逻辑否运算。其运算规则为:
0=1 非0等于1
1=0 非1等于0
4、异或逻辑运算(半加运算)
异或运算通常用符号"⊕"表示,其运算规则为:
0⊕0=0 0同0异或,结果为0
0⊕1=1 0同1异或,结果为1
1⊕0=1 1同0异或,结果为1
1⊕1=0 1同1异或,结果为0
即两个逻辑变量相异,输出才为1
异或校验算法(又称为BCC校验)
常见的校验方法有:奇偶校验、循环冗余校验CRC、异或校验、校验和、汉明校验
搞了半天,异或校验就是偶校验
下面就是异或校验的算法,多用于串口通信。其它校验方法以后用到再研究吧!
#include "stdio.h"
void main()
{
int i;
//任意10个数值,也可以不是8位
unsigned char data[10]={0x12,0x21,0x1A,0xB1,0xC1,0xEB,0xDF,0xCA,0xF6,0xDD};
unsigned char out;//用于保存异或结果
out=0x00;
for (i=0;i<sizeof(data);i++)
{
out^=data;
}
printf("原来的校验值:%X\n",out);
out^=(data[0]^0xee);//将data[0]改为新数据后计算新校验和的方法
out^=(data[5]^0x20);//将data[5]改为新数据后计算新校验和的方法
printf("修改后校验值:%X\n",out);
data[0]=0xee; //采用原始的方法计算新的校验和,和前面的校验和对比是否正确
data[5]=0x20; //采用原始的方法计算新的校验和,和前面的校验和对比是否正确
out=0x00;
for (i=0;i<10;i++)
{
out^=data;
}
printf("原始方法得出校验值:%X\n",out);
}
热心网友
时间:2024-11-28 20:51
xor异或运算公式
1、逻辑加法(“或”运算)
逻辑加法通常用符号“+”或“∨”来表示。逻辑加法运算规则如下:
0+0=0,
0∨0=0
0+1=1,
0∨1=1
1+0=1,
1∨0=1
1+1=1,
1∨1=1
从上式可见,逻辑加法有“或”的意义。也就是说,在给定的逻辑变量中,A或B只要有一个为1,其逻辑加的结果为1;两者都为1则逻辑加为1。
2、逻辑乘法(“与”运算)
逻辑乘法通常用符号“×”或“∧”或“·”来表示。逻辑乘法运算规则如下:
0×0=0,
0∧0=0,
0·0=0
0×1=0,
0∧1=0,
0·1=0
1×0=0,
1∧0=0,
1·0=0
1×1=1,
1∧1=1,
1·1=1
不难看出,逻辑乘法有“与”的意义。它表示只当参与运算的逻辑变量都同时取值为1时,其逻辑乘积才等于1。
3、逻辑否定(非运算)
逻辑非运算又称逻辑否运算。其运算规则为:
0=1
非0等于1
1=0
非1等于0
4、异或逻辑运算(半加运算)
异或运算通常用符号"⊕"表示,其运算规则为:
0⊕0=0
0同0异或,结果为0
0⊕1=1
0同1异或,结果为1
1⊕0=1
1同0异或,结果为1
1⊕1=0
1同1异或,结果为0
即两个逻辑变量相异,输出才为1
异或校验算法(又称为BCC校验)
常见的校验方法有:奇偶校验、循环冗余校验CRC、异或校验、校验和、汉明校验
搞了半天,异或校验就是偶校验
下面就是异或校验的算法,多用于串口通信。其它校验方法以后用到再研究吧!
#include
"stdio.h"
void
main()
{
int
i;
//任意10个数值,也可以不是8位
unsigned
char
data[10]={0x12,0x21,0x1A,0xB1,0xC1,0xEB,0xDF,0xCA,0xF6,0xDD};
unsigned
char
out;//用于保存异或结果
out=0x00;
for
(i=0;i<sizeof(data);i++)
{
out^=data;
}
printf("原来的校验值:%X\n",out);
out^=(data[0]^0xee);//将data[0]改为新数据后计算新校验和的方法
out^=(data[5]^0x20);//将data[5]改为新数据后计算新校验和的方法
printf("修改后校验值:%X\n",out);
data[0]=0xee;
//采用原始的方法计算新的校验和,和前面的校验和对比是否正确
data[5]=0x20;
//采用原始的方法计算新的校验和,和前面的校验和对比是否正确
out=0x00;
for
(i=0;i<10;i++)
{
out^=data;
}
printf("原始方法得出校验值:%X\n",out);
}