什么是高级语言、机器语言、汇编语言?什么是编译和解释?
1、高级语言
计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种,例如 C、C++、Java、Python 等。这些语言被称为高级语言,因为它们更接近人类的自然语言,而不是计算机能够直接理解的二进制数字。
C/C++ 中的指令:
a = 97;
高级语言中理想的属性
首先,高级语言更容易阅读和编写,因为命令更接近我们每天使用的自然语言。其次,高级语言需要更少的指令来执行与低级语言相同的任务,使程序更简洁、更容易理解。
a = b * 2 + 5;在 C++ 中,您可以在一行中执行类似操作。在汇编语言中,这需要 5 或 6 条不同的指令。程序可以针对许多不同的系统进行编译(或解释),并且您不必更改程序以在不同的 CPU 上运行(您只需为该 CPU 重新编译)。
2、机器语言
计算机的 CPU 无法使用 C/C++。CPU 可以直接理解的有限指令集称为机器代码(或机器语言或指令集)。
这是机器语言指令示例,是与上面C/C++ 中相同的指令:
10110000 01100001
这些指令指令都由 1 和 0 的序列组成。每个单独的 0 或 1 称为一个二进制数字,简称位。组成单个命令的位数各不相同。例如,某些 CPU 处理的指令始终是 32 位长,而其他一些 CPU(例如您可能正在使用的 x86/x64 系列)的指令可以是一个可变长度。
小知识(char *占几个字节)
char * 是一个指针类型,它表示一个指向字符的地址。指针的大小取决于系统的地址空间也就是系统可以访问的内存的范围。
8位系统的地址空间是 2^8 = 256 个字节,所以指针的大小是 1 个字节。
32位系统的地址空间是 2^32 = 4 GB,所以指针的大小是 4 个字节。
64位系统的地址空间是 2^64 = 16 EB,所以指针的大小是 8 个字节。
不同操作系统的库无法通用的原因(32/64)
每组二进制数字都被 CPU 解释为执行非常具体的工作的命令,例如比较这两个数字,或者将此数字放入该内存位置。但是,由于不同的 CPU 具有不同的指令集,因此为一种 CPU 类型编写的指令无法在不共享相同指令集的 CPU 上使用。这意味着程序通常无法移植(无需重大返工即可使用)到不同类型的系统,并且必须重新编写。
3、汇编语言
由于机器语言对于人类来说很难阅读和理解,因此发明了汇编语言。在汇编语言中,每条指令都由一个简短的缩写(而不是一组位)来标识,并且可以使用名称和其他数字。
这是与上面相同的汇编语言指令:
mov al, 061h
然而,组装仍然有一些缺点。首先,汇编语言仍然需要大量指令来完成甚至简单的任务。虽然各个指令本身在某种程度上是人类可读的,但理解整个程序正在做什么可能具有挑战性(这有点像试图通过单独查看每个字母来理解句子)。其次,汇编语言的可移植性仍然不是很好——为一个 CPU 用汇编语言编写的程序可能无法在使用不同指令集的硬件上运行,并且必须重写或进行大量修改。
4、编译和解释
计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种,例如 C、C++、Java、Python 等。这些语言被称为高级语言,因为它们更接近人类的自然语言,而不是计算机能够直接理解的二进制数字。
计算机的核心部件是 CPU(中央处理器),它负责执行程序中的指令。CPU 只能理解一种称为机器语言的低级语言,它是由 0 和 1 组成的位序列。每种 CPU 类型都有自己的机器语言,也称为指令集。这意味着用一种机器语言编写的程序不能在另一种机器语言的 CPU 上运行。
为了让 CPU 能够执行高级语言编写的程序,需要将高级语言转换为机器语言。这可以通过两种主要方式实现:编译和解释。
编译
编译是一种将高级语言的源代码(程序员编写的代码)转换为可执行文件(机器语言的代码)的过程。这是通过使用一种称为编译器的程序来完成的。编译器可以根据不同的 CPU 类型生成不同的可执行文件。一旦生成了可执行文件,就不需要源代码或编译器来运行程序。
这是编译过程的简化表示:

由于 C++ 程序通常是编译的,因此我们很快就会更详细地探讨编译器。
解释
解释是一种在运行时将高级语言的源代码逐行转换为机器语言的过程。这是通过使用一种称为解释器的程序来完成的。解释器可以在不同的 CPU 类型上运行相同的源代码。每次运行程序时都需要源代码和解释器。解释器往往比编译器更灵活,但运行程序时效率较低,因为每次运行程序时都需要完成解释过程。这也意味着每次运行程序时都需要解释器。
这是解释过程的简化表示:
编译和解释优缺点
- 编译的优点是生成的可执行文件通常运行得更快,而且不需要分发源代码。
- 编译的缺点是需要为每种 CPU 类型生成不同的可执行文件,而且编译过程可能比较耗时。
- 解释的优点是源代码可以在不同的 CPU 类型上运行,而且不需要编译过程。
- 解释的缺点是运行程序时需要解释器,而且运行速度通常比编译的慢。
相关文章:
什么是高级语言、机器语言、汇编语言?什么是编译和解释?
1、高级语言 计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种,例如 C、C、Java、Python 等。这些语言被称为高级语言,因为它们更接近人类的自然语言,而不是计算机能够直接…...
简要介绍Spring原生框架与Spring是轻量级框架的原因
😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…...
成为AI产品经理——AI产品经理工作全流程
目录 一、业务背景 二、产品工作流程 1.需求定义 2.技术预研 3.数据准备 4.模型构建、宣讲和验收 5.工程开发及产品上线运营 一、业务背景 背景:排球日常训练活动、排球中考项目和排球体测项目耗费了大量人力成本和时间成本。 目标:开发一套用…...
git commit 撤销的三种方法
一般在提交代码的时候,顺序是这样的 git status // 查看修改文件状态(已添加至暂存区还是未添加至暂存区)git add . // 添加所有已修改文件 git add xxx/xxx // 添加目录为xxx/xxx的文件至暂存区git commit -m xx功能全部完成 // 提交暂存区…...
Linux系统编程 day06 进程间通信
进程间通信 1. 进程间通信的概念2. 匿名管道pipe3. 命名管道FIFO4. 内存映射区 1. 进程间通信的概念 在Linux的环境下,进程地址空间是相互独立的,每个进程有着各自不同的用户地址空间。一个进程不能访问另一个进程中的内容,要进行数据交换必…...
血的教训--redis被入侵之漏洞利用复现--总览
血的教训–redis被入侵之漏洞利用复现–总览 相信大家对于自己的服务器被入侵,还是比较憎恨的,我的就被攻击了一次,总结经验,自己也是整理了这一个系列,从最基础到最后面的自己总结被攻破的步骤,非常清晰的…...
C语言矩阵乘积(ZZULIOJ1127:矩阵乘积)
题目描述 计算两个矩阵A和B的乘积。 输入第一行三个正整数m、p和n,0<m,n,p<10,表示矩阵A是m行p列,矩阵B是p行n列;接下来的m行是矩阵A的内容,每行p个整数,用空格隔开;最后的p行是矩阵B的内…...
用windows自带的FTP服务器实现同一局域网建立ftp服务器实现文件共享的详细步骤
原理 Windows自带的FTP服务器是Internet Information Services(IIS)组件的一部分,可以用于同一局域网建立FTP服务器以实现文件共享。下面是使用Windows自带的FTP服务器实现文件共享的详细步骤: 安装IIS组件: 打开控制…...
SpringBoot——模板引擎及原理
优质博文:IT-BLOG-CN 一、模板引擎的思想 模板是为了将显示与数据分离,模板技术多种多样,但其本质都是将模板文件和数据通过模板引擎生成最终的HTML代码。 二、SpringBoot模板引擎 SpringBoot推荐的模板引擎是Thymeleaf语法简单࿰…...
java开发中各个环境的适用场景
java开发中各个环境的适用场景 一.开发环境 在系统开发的经典模型,一般会分成 2 类 5 种环境: 【线下】本地环境(local)、开发环境(dev)、测试环境(test) 【线上】预发布环境(stage)、生产环境(prod) 每个环境、每个项目使用独立的二级域名 线下、线…...
【Java程序员面试专栏 专业技能篇】Java SE核心面试指引(二):面向对象思想
关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第二部分:面向对象思想,子节点表示追问或同级提问 面向对象基…...
Redis 反序列化失败
文章目录 问题原序列化配置修改配置解决方法 问题 com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of org.springframework.security.core.authority.SimpleGrantedAuthority (although at least one Creator exists): cannot deser…...
uniapp 导航分类
商品分类数据,包括分类名称和对应的商品列表点击弹出 列表的内容 展示效果如下: 代码展示 ①div部分 <view class"container"><view class"menu-bar"><view class"menu"><view class"menu-sc…...
Vue + Element UI 实现复制当前行数据功能及解决复制到新增页面组件值不更新的问题
文章目录 引言第一部分:复制当前行数据功能的实现1.1 环境准备1.2 创建表格并渲染数据1.3 解决复制的数据不更新问题 第二部分:拓展知识2.1 Vue的响应性原理2.2 Element UI的更多用法 结语 Vue Element UI 实现复制当前行数据功能及解决复制到新增页面组…...
智慧化工~工厂设备检修和保全信息化智能化机制流程
化工厂每年需要现场检修很多机器,比如泵、压缩机、管道、塔等等,现场检查人员都是使用照相机,现场拍完很多机器后,回办公室整理乱糟糟的照片,但是经常照了之后无法分辨是哪台设备,而且现场经常漏拍…...
【LeetCode热题100】【哈希】字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", …...
基于C#实现Bitmap算法
在所有具有性能优化的数据结构中,我想大家使用最多的就是 hash 表,是的,在具有定位查找上具有 O(1)的常量时间,多么的简洁优美,但是在特定的场合下: ①:对 10 亿个不重复的整数进行排序。 ②&am…...
科学与工程计算基础(数值计算)知识点总结
数值计算 第1章 概论1.2 数值计算中的误差1.2.1 误差的来源和分类1.2.2 误差与有效数字1.2.3 数值运算的误差估计 1.3 误差定性分析和避免误差危害1.3.1 算法的数值稳定性1.3.3 避免误差危害 1.4 数值计算中算法设计的技术1.5 习题1.5.1 判断题1.5.2 计算题 第2章 插值法2.2 拉…...
oracle查询开始时间和结束时间之间的连续月份
SELECT TO_CHAR(ADD_MONTHS(TO_DATE(2023-01,YYYY-MM), ROWNUM - 1), YYYY-MM) AS fmonth FROM DUALCONNECT BY ROWNUM < CEIL(MONTHS_BETWEEN(TO_DATE(2023-11, YYYY-MM), TO_DATE(2023-01,YYYY-MM))1)...
通过 python 脚本迁移 Redis 数据
背景 需求:需要将的 Redis 数据迁移由云厂商 A 迁移至云厂商 B问题:云版本的 Redis 版本不支持 SYNC、MIGRATE、BGSAVE 等命令,使得许多工具用不了(如 redis-port) 思路 (1)从 Redis A 获取所…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
