奇偶校验(附代码实现)

2023-05-16

定义

奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。

简单来说就是:

奇校验:使完整编码(有效位和校验位)中的"1"的个数为奇数个;
偶校验:使完整编码(有效位和校验位)中的"1"的个数为偶数个

示例

进入的数必须是7位以内的,然后二进制向左移一位,根据二进制中1的个数在后面加上1或者0(加0和没加一样),把二进制中1的个数凑成奇数个或者偶数个。

数据(1的个数)奇校验偶校验
000 0011(2)000 0011 1 000 0011 0
000 0100(1)000 0100 0 000 0100 1
111 1111(7)111 1111 0 111 1111 1

代码

C语言实现:

#include<stdio.h>
#include<string.h>

unsigned char add(char data)//奇校验 
{
    int i, cnt = 0;

    for (i = 0; i < 7; i++)//一个char型有7位
    {
        int temp = ((data >> i) & 1);//data >> i是向右移i个位置得到的值,((data >> i) & 1)是与1不同的个数
        cnt += temp;//cnt记录二进制下data中1的个数
    }

    unsigned char ans = data << 1;//左移1位 
    
    if (cnt % 2 == 0)//当cnt能够被2整除,即cnt是偶数,即1的个数是偶数
    {
        ans += 1;//在最右边加1
    }
    else//当cnt不能够被2整除,即cnt是奇数,即1的个数是奇数
    {
        ans += 0;//在最右边加0
    }
    return ans;
}

unsigned char add_2(char data)//偶校验 
{
    int i, cnt = 0;

    for (i = 0; i < 7; i++)//一个char型有7位
    {
        int temp = ((data >> i) & 1);//data >> i是向右移i个位置得到的值,((data >> i) & 1)是与1不同的个数
        cnt += temp;//cnt记录二进制下data中1的个数
    }

    unsigned char ans = data << 1;//左移1位 
    
    if (cnt % 2 == 0)//当cnt能够被2整除,即cnt是偶数,即1的个数是偶数
    {
        ans += 0;//在最右边加0
    }
    else//当cnt不能够被2整除,即cnt是奇数,即1的个数是奇数
    {
        ans += 1;//在最右边加1
    }
    return ans;
}

int main()
{
    char a;
    unsigned char b;
    scanf("%c", &a);
    b = add(a);
    printf("2进制结果表示为:");//输出b的2进制表示
    for (int i = 7; i >= 0; i--) {
        if (((b>>i) & 1) == 1)
            printf("1");
        else
            printf("0");
    } putchar(10);

    printf("8进制结果表示为:%o\n",b);//输出b的8进制表示

    printf("10进制结果表示为:%d\n",b);//输出b的10进制表示

    printf("16进制结果表示为:%x\n", b);//输出b的16进制表示
    
    return 0;
}

扩展

奇偶校验的优缺点:

1、奇偶校验有两种类型:奇校验和偶校验。奇偶校验位是一个表示给定位数的二进制数中1的个数是奇数或者偶数的二进制数,奇偶校验位是最简单的错误检测码。

2、传输过程中包括校验位在内的奇数个数据位发生改变,那么奇偶校验位将出错表示传输过程有错误发生。

3、奇偶校验位是一种错误检测码,但是由于没有办法确定哪一位出错,所以它不能进行错误校正。发生错误时必须扔掉全部的数据,然后从头开始传输数据。

4、在噪声很多的媒介上成功传输数据可能要花费很长的时间,甚至根本无法实现。

5、它是使用一位数据能够达到的最好的校验码,并且它仅仅需要一些异或门就能够生成。奇偶校验被广泛应用。

奇偶校验的用途:
(1)奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。

(2)单向奇偶校验(Row Parity)由于一次只采用单个校验位,因此又称为单个位奇偶校验。发送器在数据祯每个字符的信号位后添一个奇偶校验位,接收器对该奇偶校验位进行检查。典型的例子是面向ASCII码的数据信号祯的传输,由于ASCII码是七位码,因此用第八个位码作为奇偶校验位。

(3)奇偶校验只可以简单判断数据的正确性,从原理上可看出当一位出错,可以准确判断,如同时两个1变成两个0就校验不出来了,只是两位或更多位及校验码在传输过程中出错的概率比较低,奇偶校验可以用的要求比较低的应用下。同时,它不能纠错。在发现错误后,只能要求重发。

如果对您有帮助的的话,欢迎点赞哦~谢谢

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

奇偶校验(附代码实现) 的相关文章

  • 【ZedBoard实验随笔】OV7670 摄像头 简单总结

    1 xff0c OV7670 有一大堆寄存器需要配置 xff0c 这些配置可以参考别人已经做好的代码 2 xff0c OV7670 设置为640 480 16的分辨率 xff0c 30帧每秒 xff0c 就是30FPS xff0c 每一个R
  • AXI STREAM ,AXIS总线的理解

    全兼容ZEDBOARD 开发板子 SYSCLK TAOBAO COM 1 xff0c VALID和READY 是所有AXI总线必须有的 xff0c VALID是MASTER告诉SLAVE数据已经展现在了总线上了 xff0c 你可以取走了 x
  • ZYNQ7 DACHE的重要操作

    Flush the SrcBuffer before the DMA transfer in case the Data Cache is enabled Xil DCacheFlushRange u32 TxPacket MAX PKT
  • OV7670摄像采集图像在VGA上显示的分析和实现,精确到每个时钟,每行代码。

    OV7670使用RGB565模式 xff0c 30FPS xff0c 采集分辨率为640X480 xff0c 保存在ZYNQ7芯片7Z020的内部BRAM VGA控制器在读出端读出数据 xff0c 并用12BIT的色彩深度现在VGA接口屏幕
  • Ubuntu 20.04 python2安装pip

    Ubuntu 20已经无法通过apt来安装python2的pip2了 xff0c 只能安装python3的pip 方法 先确保你有python2 暂时还是可以用apt安装python2 sudo apt install python2 下面
  • PetaLinux 2019.1详细安装步骤以及所需要文件

    这里主要根据UG1144文档 xff0c 这两天成功安装使用了PetaLinux的最新版本2019 1 一 xff0c 在虚拟机里安装Ubuntu16 04 1 xff0c 选Ubuntu 操作系统的版本是16 04 我最初尝试过18版本的
  • STC芯片在Keil中的添加与使用

    一 使用官方烧录工具 stc isp v6 88K exe在Keil中添加STC芯片 此烧录工具可在STC官网上下载 二 打开STC ISP软件 xff0c 选择右侧 Keil仿真设置 栏 三 选择 添加型号和头文件到Keil中 添加STC
  • boost 与 C++11 比较

    先不说boost的初始化表是多么怪异的形式了 c 43 43 11用大括号一括起来就OK了 auto 和 boost auto 差别太大了 xff0c 必须得告诉boost auto宏一个类型 xff0c 而非编译器本身的推断 xff0c
  • C++——struct和class的区别

    在C语言中struct是一种数据类型 xff0c 那么就肯定不能定义函数 xff0c 所以在面向c的过程中 xff0c struct不能包含任何函数 否则编译器会报错 而在C 43 43 中 xff0c 其特性也有了新发展 xff0c 就拿
  • roslaunch使用示例

    本文是看了学长ROS 的 roslaunch 中 xml 相关要点 文章之后做了小改动 xff0c 主要是对 roslaunch 文件的简单总结 需要完成的前序工作是已经创建了 catkin 工作空间 xff1b 创建了 catkin 程序
  • 四旋翼的运动原理及几个飞行问题

    四旋翼的运动及原理 飞行的问题 调试 四旋翼飞行器通过调节四个电机转速来改变旋翼转速 xff0c 实现升力的变化 xff0c 从而控制飞行器的姿态和位置 四旋翼飞行器是一种六自由度的垂直升降机 xff0c 但只有四个输入力 xff0c 同时
  • 以太网数据包长度限制

    我们使用以太网进行数据传输 xff08 UDP TCP xff09 xff0c 数据包的大小是有限制的 xff0c 并不是多长都可以 TCP IP协议从下到上包含 xff1a 链路层 IP层 传输层 应用层 链路层 xff1a 链路层的数据
  • 串口接收完整一帧数据包的3种方法

    本文介绍3种使用串口接受一帧完整数据包的方法 xff0c 串口接收数据是字节接收的 xff0c 串口每接收1字节数据 xff0c 产生一个串口中断 xff0c 我们在中断中将接收到的数据存放到buf中进行保存 xff0c 但是数据的发送和接
  • 补码原码转换

    本文主要讲述补码和原码之间的换算 1 原码 转 补码 xff1a 正整数的补码是它本身 xff0c 即 1的原码是0000 0001 xff0c 补码 还是 0000 0001 负整数的补码是符号位不变 xff0c 其余位按位取反 xff0
  • 有符号数与无符号数之间的转换

    本文讲解有符号数和无符号数之间的转换 针对同一数据类型有符号数和无符号数之间的转换 xff0c 例如 int 和 unsigned int 之间和 char 和 unsigned char 之间 这种情况下 xff0c 二者之间的数据类型长
  • Ubuntu由于修改etc/profile文件导致开机无法登陆问题解决办法(仅供参考)

    在安装jdk或者arm linux gcc等开发工具时需要修改profile xff0c 一不小心导致无法正常登录系统 xff0c 这时候可以试试用以下办法解决 xff1a 1 进入ubuntu登录页面 xff0c 按alt 43 ctrl
  • 一文看懂,用示波器查看串口UART的波形,什么是数据位、起始位、奇偶校验位

    先介绍一些概念 起始位 先发出一个逻辑 0 的 信号 xff0c 表示传输数据的开始 校验位 xff1a 数据位加上这一位后 xff0c 使得 1 的位数应为偶数 偶校验 或奇数 奇校验 xff0c 以此来校验数据传送的正确性 就比如传输
  • Could not get lock /var/lib/dpkg/lock 问题解决方法

    今天在ubuntu上安装sqlite 时 xff0c 执行命令sudo apt get y install sqlite3 时 xff0c 系统提示 xff1a Could not get lock var lib dpkg lock op
  • Linux 应用开发之系统调用

    系统调用 xff08 System Call xff09 是操作系统提供给用户程序调用的一组 特殊 函数接口 Linux 系统分为内核空间和用户空间 xff0c 用户空间只能通过系统调用接口与内核空间进行通信 Linux 系统提供了两种方式
  • Linux Qt 开发之多线程

    Qt 应用程序中所有的界面响应事件都在一个主线程中运行 xff0c 当我们去调用QApplication对象的exec 方法时 xff0c Qt就不断去循环查询当前的事件队列中有没有事件发生 xff0c 如果有则转去执行对应的槽函数 xff

随机推荐

  • Linux根文件系统的制作(转载)

    Linux根文件系统的制作 什么是文件系统 计算机的文件系统是一种存储和组织计算机数据的方法 xff0c 它使得对其访问和查找变得容易 xff0c 文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念 xff0
  • vector

    原网址 xff1a http www cnblogs com zjfdlut archive 2010 11 13 1876409 html 个人菜鸟 xff0c 发表下对头文件包含顺序的看法 xff1a 首先是常规的包含 xff1a 1
  • add_libraries, add_executable, target_link_libraries, link_libraries用法

    相关命令用法 add libraries将指定的源文件生成库文件 add executable将指定的源文件生成可执行文件 target link libraries跟在add xxxx后 xff0c 表示在上述两命令生成的文件后进行外部库
  • cmake 链接动态链接库

    使用相对路径的时候 xff0c 你要让cmake能够搜索到找到你动态库 xff0c 就像直接使用gcc g 43 43 来链接的时候一样 xff0c 要使用 L来指定第三方库所在路径 cmake可以使用 LINK DIRECTORIES 命
  • TI毫米波雷达芯片(AWR2243)MIMO模式设置

    1 AWR 2243 支持的MIMO模式 awr 2243为三发四收 xff0c 支持时分多路复用 xff08 TDM xff09 MIMO模式 xff0c 以及三个发射天线同时工作的BPM MIMO模式 xff08 二进制调制相位调制 x
  • Odroid U3 烧写镜像文件

    点击打开链接 用SD卡烧写镜像文件 1 在liunx 终端建工作目录 xff1a mkdir linux img cd linux img 2 下载镜像 wget http odroid in ubuntu 14 04 1lts ubunt
  • win下批处理控制扩展屏幕

    仅电脑屏幕 displayswitch internal 复制 displayswitch clone 扩展 displayswitch extend 仅第二屏幕 displayswitch external 引用来源 xff1a http
  • ubuntu 安裝deb_.deb文件如何安装,Ubuntu下deb安装方法图文详解

    deb包是Debian xff0c Ubuntu等Linux发行版的软件安装包 xff0c 扩展名为 deb xff0c 是类似于rpm的软件包 xff0c Debian xff0c Ubuntu系统不推荐使用deb软件包 xff0c 因为
  • day3. -2 NX的SPI操作

    1 NVIDIA在线文档 https docs nvidia com jetson l4t index html page Tegra 20Linux 20Driver 20Package 20Development 20Guide hw
  • (二)随处可见的LED广告屏是怎么工作的呢?代码实现

    书接上回 xff0c 上一篇中我们聊到了LED点阵屏的工作原理和一些电气参数 本篇以第一篇为基础 xff0c 对软件层面进行展开 xff0c 同时也为下一篇接入GUI做铺垫 文章较第一篇有所增长 xff0c 大概需要5 7分钟可以看完 目标
  • (三)随处可见的LED广告屏是怎么工作的呢?接入GUI

    续上文 xff0c 本篇我们将尝试接入一个GUI来控制点阵屏 在前两篇中 xff0c 我们相继介绍了点阵屏的控制原理 xff0c 以及如何让点阵屏按照我们所想的进行显示 本篇将在此基础上接入一个GUI xff0c 使点阵屏的控制更加优雅 限
  • 解决:在STM32的标准库上添加DSP库时error: #247

    DSP库相对于标准的 math h 对浮点计算做了优化和增强 xff0c 运算速度更快 关于STM32如何添加DSP库 xff0c 网上有很多教程 xff0c 笔者在实际操作时发现会遇到keil报error 247的问题 针对于解决过程 x
  • CAN总线多帧即连续帧数据发送 拆包与重装

    1939协议支持多帧数据发送即数据超过8个的帧发送 用户可以通过ID来识别当前帧是否为多帧发送 xff08 连续帧 xff09 xff0c 如果是多帧发送ID xff0c 举例 xff1a 1C EC F4 56 其中 F4和56为目标地址
  • DLT645-2007 规约 电表 报文解析

    注 xff1a 本文为转载 转载地址 xff1a https wenku baidu com view cc10838283d049649b66580d html DLT645 2007 规约 常见报文解析 2012 9 29 by leg
  • 同相比例放大器 输入端 平衡电阻的问题

    同相比例放大器 xff0c 电路原型如下 xff0c 该图是从网上摘取的 xff08 如侵权请联系删除 xff0c 原网址链接见注1 xff09 其中R1为平衡电阻 xff0c 该电阻存在的意义个人认为用于平衡 43 和 向的输入电流 xf
  • SIM800C 透传模式与非透传模式测试对比

    测试过程中 xff0c 公网 IP地址为 xff1a 39 162 72 33 1080 测试 SIM xff1a 中国移动物联卡 测试数据格式 xff1a 16进制 链路连接 xff1a 单路 工作模式 xff1a TCP客户端 说明 x
  • PADS 无模命令 层显示

    Z 43 1 显示的为第一层 Z 43 2 显示的为第二层 依次类推 Z 43 o 显示外层 xff0c 即首层 Z xff08 n M 即显示第几层到第几层 Z 显示所有层 ZT 显示顶层 ZB 显示底层 ZSM Z B显示底层Z C显示
  • 16位精度 ADC 选型

    ADS8320 售价 xff1a 人民币25 40元 ADS8320 16 Bit High Speed 2 7 V to 5 V microPower Sampling Analog to Digital Converter 1Featu
  • 怎么样在stata上安装pwcorr_a啊?findit pwcorr_a之后就是下面图那样?

    怎么样在stata上安装pwcorr a啊 xff1f findit pwcorr a之后就是下面图那样 xff1f 转载 xff1a 我的电脑用findit 不行 xff0c 经管之家的要收费 xff0c 在Gitte网站找到一个开源的压
  • 奇偶校验(附代码实现)

    定义 奇偶校验 Parity Check 是一种校验代码传输正确性的方法 根据被传输的一组二进制代码的数位中 1 的个数是奇数或偶数来进行校验 采用奇数的称为奇校验 xff0c 反之 xff0c 称为偶校验 采用何种校验是事先规定好的 通常