CSP初赛知识学习计划(第四天)

news2025/1/8 15:31:13

二进制编码与逻辑运算基础全析

一、引言
在计算机科学领域,二进制犹如基石般奠定了信息存储、处理与传输的基础。无论是简单的计算器运算,还是复杂的人工智能算法底层实现,都离不开二进制编码及其衍生的各种概念,像原码、补码、反码用于数值表示,ASCII码用于字符转换,还有逻辑运算掌控着程序流程中的条件判断与数据筛选。深入理解这些知识,是开启计算机世界大门的关键一步。

二、二进制原码

  1. 定义
    原码是一种简单直观的二进制数值表示法,它直接将数值转换为二进制,最高位用作符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。例如,对于十进制数 +5,其 8 位二进制原码为 00000101;而 -5 的 8 位二进制原码则是 10000101。
  2. 优点与局限性
    • 优点在于直观易懂,与日常使用的十进制正负表示概念相近,容易理解数值的正负性质。
    • 局限性十分显著,原码进行加减法运算时,计算机需要单独处理符号位,这使得电路设计复杂且运算效率低。例如计算 1 + (-1),若直接用原码 00000001 + 10000001,结果为 10000010,即 -2,显然不符合数学逻辑。

三、二进制反码

  1. 定义
    反码是在原码基础上,对除符号位之外的其余各位取反得到的编码。正数的反码与原码相同,负数的反码则是符号位不变,数值位按位取反。如 +5 的 8 位反码还是 00000101,而 -5 的 8 位反码为 11111010。
  2. 运算规则
    在反码运算系统里,减法可转换为加法。但运算时,符号位也参与运算,若最高位有进位,则需将进位“循环”加到结果的最低位,这种进位处理方式在一定程度上简化了减法操作,但仍不够完美,因为它并未彻底解决正负相加结果不准确的问题。例如,用反码计算 5 + (-3),5 的反码为 00000101,-3 的反码为 11111100,相加得 100000001,将进位 1 加到最低位得到 00000010,即 +2,结果正确;可计算 1 + (-1) 时,1 的反码 00000001 与 -1 的反码 11111110 相加得 11111111,按规则处理后结果是 00000000,看似正确,实则掩盖了原码运算缺陷,未从根本上统一正负数值运算逻辑。

四、二进制补码

  1. 定义
    补码是现代计算机中最常用的数值表示法。正数的补码与原码、反码相同;负数的补码是其反码加 1。例如 +5 的 8 位补码为 00000101,-5 的补码为 11111011(先求反码 11111010 再加 1)。
  2. 优势
    补码彻底解决了计算机中加减法统一运算的难题,让符号位能如同数值位一样参与运算,无需额外区分正负操作。任何两个补码数相加或相减,结果都是正确的补码形式,硬件实现简单高效。例如,计算 3 + (-2),3 的补码 00000011 与 -2 的补码 11111110 相加得 00000001,即 +1,完全符合数学运算结果;计算 1 + (-1),二者补码相加 00000001 + 11111111 得 00000000,准确得出结果,这使得计算机的算术逻辑单元(ALU)设计得以简化,运算速度大幅提升。

五、ASCII 码

  1. 基本概念
    ASCII(American Standard Code for Information Interchange),即美国信息交换标准代码,是基于拉丁字母的一套电脑编码系统,用于将字符表示成数字形式以便计算机存储和处理。它用 7 位二进制数编码,可表示 128 个字符,包括 26 个英文字母(大小写)、0 - 9 数字、标点符号、控制字符等。例如,字符‘A’的 ASCII 码值为 01000001,十进制表示是 65;‘0’的 ASCII 码值为 00110000,十进制为 48。
  2. 常用字符编码转换
    • 在编程中,经常需要字符与 ASCII 码值的相互转换。许多编程语言提供内置函数来实现,如在 Python 中,使用 ord() 函数可获取字符的 ASCII 码值,如 ord('a') 返回 97;chr() 函数则相反,能根据 ASCII 码值得到对应的字符,如 chr(66) 返回‘B’。
    • 文本文件存储时,字符按其 ASCII 码值以二进制形式存入磁盘。当读取文件时,计算机再将这些二进制数转换回字符显示,这一过程无缝衔接,让用户能轻松输入、编辑文本,而底层是 ASCII 码保障信息的数字化存储与还原。

六、逻辑运算

  1. 逻辑非(NOT)
    • 运算规则:逻辑非是一元运算,对单个逻辑值取反。若输入为真(True,在二进制中常用 1 表示),输出为假(False,常用 0 表示);反之,若输入为假,输出为真。例如,对二进制数 1 进行逻辑非运算,结果为 0;对 0 运算结果为 1。
    • 应用场景:常用于条件判断的反转,如在程序中判断某个条件不成立时执行特定操作。比如,若变量 flag 标记某任务是否完成(1 表示完成,0 表示未完成),当需要在任务未完成时提示用户,就可用 if NOT flag: 这样的语句结构,简洁地实现反向条件判断。
  2. 逻辑与(AND)
    • 运算规则:逻辑与是二元运算,当且仅当两个输入都为真(1)时,输出才为真(1),否则输出为假(0)。以两个二进制数 1010 和 1100 按位进行逻辑与运算为例,从高位到低位依次计算:第 1 位 1 AND 1 = 1;第 2 位 0 AND 1 = 0;第 3 位 1 AND 0 = 0;第 4 位 0 AND 0 = 0,结果为 1000。
    • 应用场景:常用于多条件同时满足的判断。如在登录系统验证用户名和密码时,只有当输入的用户名正确(假设用变量 user_name_correct 表示,正确为 1)且密码正确(password_correct 为 1),才允许登录,可用代码 if user_name_correct AND password_correct: 来实现严格的双重验证,确保系统安全性。
  3. 逻辑或(OR)
    • 运算规则:同样是二元运算,只要两个输入中有一个为真(1),输出就为真(1),仅当两个输入都为假(0)时,输出才为假(0)。例如,对二进制数 0101 和 0011 进行逻辑或运算,按位计算:第 1 位 0 OR 0 = 0;第 2 位 1 OR 0 = 1;第 3 位 0 OR 1 = 1;第 4 位 1 OR 1 = 1,结果为 0111。
    • 应用场景:常为用户提供操作灵活性。比如在软件安装过程中,允许用户选择从光盘安装(install_from_cd 为 1)或从网络下载安装(install_from_net 为 1),只要满足其一就能继续安装流程,可通过 if install_from_cd OR install_from_net: 语句实现,给用户多样选择,提升体验。
  4. 优先级
    在包含多种逻辑运算的复杂表达式中,优先级顺序为:逻辑非(NOT)最高,其次是逻辑与(AND),逻辑或(OR)最低。例如表达式 NOT A AND B OR C,先计算 NOT A,再将结果与 B 进行逻辑与运算,最后将所得结果与 C 进行逻辑或运算。若要改变默认优先级,可使用括号,如 (NOT A) AND (B OR C),会先算括号内的逻辑或,再算括号外的逻辑与,精准控制运算顺序以契合程序逻辑需求。

七、条件表达式

  1. 基本语法与用法
    条件表达式又称三元表达式,在许多编程语言中具有简洁高效的特性。其基本语法形式为 condition? expression1 : expression2,其中 condition 是一个求值结果为布尔值(真或假)的条件判断,当 condition 为真时,整个表达式的值为 expression1 的值,反之则为 expression2 的值。例如在 Python 中,max_value = a if a > b else b,它判断 a 是否大于 b,若是则 max_value 赋值为 a,否则赋值为 b,用一行代码实现了求两数最大值的功能,相比传统的 if - else 语句块更加紧凑直观,常用于简单的条件赋值场景。
  2. 优势与注意事项
    • 优势在于代码简洁,能快速实现简单分支逻辑,减少代码嵌套,增强可读性。尤其在对变量根据条件快速初始化或更新时,优势明显,使程序逻辑一目了然。
    • 注意事项是不宜过度使用,当条件复杂、分支执行语句较多时,强行用三元表达式会导致代码难以理解维护,此时传统的 if - elseswitch 结构更为合适。且不同编程语言对三元表达式细节可能有差异,如某些语言中三元表达式各部分求值顺序有规定,使用时需参考对应语言文档。

八、总结
二进制原码、补码、反码为计算机数值处理提供基础方法,从原码直观但运算不便,到反码过渡,最终补码实现高效统一运算;ASCII 码架起字符与数字转换桥梁,让文本信息数字化流转;逻辑运算与条件表达式掌控程序逻辑走向,从基本逻辑操作规则到复杂条件判断组合,共同构建起计算机底层逻辑大厦。掌握这些知识,不仅能深入理解计算机工作原理,更能在编程实践、算法设计、系统开发等多领域灵活运用,为深入探索计算机科学前沿铺就坚实道路,开启无尽创新可能。无论是简单的数据处理脚本,还是大型分布式系统底层核心,这些基础概念都如影随形,持续发挥关键支撑作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)

文章目录 接收消息的原理接收消息JavaScript代码 接收消息的原理 接收消息,就是接受服务器转发的客户端消息。并不需要单独创建函数,因为 ws.onmessage会自动接收消息。我们需要在这个函数里进行处理。因为初始化的时候,已经处理的init类型的…

当算法遇到线性代数(四):奇异值分解(SVD)

SVD分解的理论与应用 线性代数系列相关文章(置顶) 1.当算法遇到线性代数(一):二次型和矩阵正定的意义 2.当算法遇到线性代数(二):矩阵特征值的意义 3.当算法遇到线性代数&#xff0…

科研绘图系列:R语言科研绘图之标记热图(heatmap)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 科研绘图系列:R语言科研绘图之标记热图(heatmap) 加载R包 library(tidyverse) library(ggplot2) library(reshape)…

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言,用户只需要指定想要执行的操作,而不需要详细说明如何…

Excel重新踩坑5:二级下拉列表制作;★数据透视表;

0、在excel中函数公式不仅可以写在单元格里面,还可以写在公式里面。 1、二级下拉列表制作: 2、数据透视表: 概念:通过拖拉就能实现复杂函数才能实现的数据统计问题。 概览:在插入选项中有个数据透视表,数…

Linux-----进程处理(waitpid,进程树,孤儿进程)

目录 waitpid等待 进程树 孤儿进程 waitpid等待 Linux中父进程除了可以启动子进程,还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收,那么子进程就会变成一个僵尸进程——即程序执行完成,但是进程没有完全结束,其…

解决报错net.sf.jsqlparser.statement.select.SelectBody

在我们项目集成mybatis-plus时,总会遇到奇奇怪怪的报错,比如说下面的这个报错 而这个报错,是告诉我们的分页依赖冲突,要加个jsqlparser依赖来解决这个冲突,也相当于平衡,但是可能因为我们版本的不匹配,还是会报错,例如下面这样 但是我们是不知道到底是什么依赖冲突的,这个时候就…

感知器的那些事

感知器的那些事 历史背景Rosenblatt和Minsky关于感知机的争论弗兰克罗森布拉特简介提出感知器算法Mark I感知机争议与分歧马文明斯基简介单层感知器工作原理训练过程多层感知器工作原理单层感知机 vs 多层感知机感知器模型(Perceptron),是由心理学家Frank Rosenblatt在1957年…

内核链表 例题 C语言实现

问题: 将下面的数据节点信息转换为链表结构,并遍历输出。要求根据type的值来决定val的类型。 type为1代表bool类型,2代表整形,3代表浮点型。无需解析文本,直接赋值形成节点即可。 代码: list.c #includ…

C语言结构体数组

上次我们讲解了结构体,这里还有高级应用就是结构体数组(集合的集合) (这里提醒一句,想要在北京参加NCRE考试的朋友们今天开始报名了) 定义 还是拿上回那个学生数据的结构体 typedef struct {int year;i…

深入了解 ES6 Map:用法与实践

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

在Vue3项目中使用svg-sprite-loader

1.普通的svg图片使用方式 1.1 路径引入 正常我们会把项目中的静态资源放在指定的一个目录&#xff0c;例如assets,使用起来就像 <img src"../assets/svgicons/about.svg" /> 1.2封装组件使用 显然上面的这种方法在项目开发中不太适用&#xff0c;每次都需…

谷歌SEO真的需要很长时间吗?

关键在于策略与执行力&#xff0c;很多人在刚开始做谷歌SEO时&#xff0c;都会产生一种挫败感&#xff0c;觉得排名变化太慢&#xff0c;看不到显著效果。这其实是因为SEO本身是一项需要时间的工作&#xff0c;特别是在竞争激烈的领域。但如果策略得当、执行力强&#xff0c;时…

耐高压26V输入5V升压充电8.4V芯片

HU6877作为一款集成了26V高耐压保护的5V升压至8.4V两节锂电池充电管理IC&#xff0c;凭借其高效升压、智能充电管理、多重安全保护及高耐压特性&#xff0c;在高端手电筒、便携式医疗设备、无人机等领域展现出了广泛的应用前景。本文将详细探讨HU6877的技术特点、工作原理、应用…

linuxCNC(六)配置LinuxCNC完成伺服控制

这里写目录标题 1、 cia402安装2、找伺服描述文件&#xff08;xml&#xff09;3、配置ethercat-config.xml3.1、打开hal-cia402/example/ethercat-conf.xml3.2、修改 ethercat-conf.xml文件中vid"0x000116c7" pid"0x003e0402"3.3、其他参数&#xff0c;根据…

【数据结构】链表(2):双向链表和双向循环链表

双向链表&#xff08;Doubly Linked List&#xff09; 定义&#xff1a; 每个节点包含三个部分&#xff1a; 数据域。前驱指针域&#xff08;指向前一个节点&#xff09;。后继指针域&#xff08;指向下一个节点&#xff09;。 支持从任意节点向前或向后遍历。 #define dat…

指针 const 的组合

1、首先来了解一下常量 const int num 5&#xff1b; 那么num的值是5&#xff0c; num的值不可修改 2、来了解一下指针 int value 5; int* p &value; 我喜欢吧指针和类型放一起&#xff0c;来强调p是一个指针类型&#xff0c; 而赋值的时候就得赋值一个int类型的地址…

Tableau数据可视化与仪表盘搭建-数据可视化原理

目录 内容 做个小实验 数据如何变成图表 1 2 维度和度量定义 3 度量映射图形&#xff0c;维度负责区分 1 可映射的数据类型 2 可视化字典 3 使用Tableau将数据变成图表(Tableau可视化原理) 1 2 拖拽 3 具体操作 4 总结 内容 点击左下角的工作表 tableau可以自动…

【WRF数据准备】气象驱动数据-ERA5是否需要单层位势数据?

目录 气象驱动数据-ERA5是否需要单层位势(Geopotential)数据?位势(Geopotential)输入的重要性Vtable的管理参考气象驱动数据-ERA5是否需要单层位势(Geopotential)数据? 本博客参考WRF论坛中讨论内容-How to use ERA5 Data From Copernicus Database,总结位势(Geopot…

用ResNet50+Qwen2-VL-2B-Instruct+LoRA模仿Diffusion-VLA的论文思路,在3090显卡上训练和测试成功

想一步步的实现Diffusion VLA论文的思路&#xff0c;不过论文的图像的输入用DINOv2进行特征提取的&#xff0c;我先把这个部分换成ResNet50。 老铁们&#xff0c;直接上代码&#xff1a; from PIL import Image import torch import torchvision.models as models from torch…