精选分类

文章列表

12k 11 分钟

# 深入理解计算机系统 # 程序的机器级表示 从源代码转为机器代码的过程: 预处理器会扩展源代码,插入所有用 #include 指令的文件,扩展所有用 #define 声明指定的宏。 编译器基于编程语言的规则、目标机器的指令集和操作系统的惯例,会将源代码转换为汇编代码作为输出,给出程序的每一条指令。 汇编器将汇编代码转化为二进制目标代码文件,它是机器代码的一种形式,包含了所有指令的二进制表示,但是还没有填入全局值的地址。 链接器将目标代码文件和实现库函数的代码合并,产生最终可执行代码文件。 生成 mstore.c 所对应得汇编文件 mstore.s: -Og...
24k 22 分钟

# 计算机网络 计算机网络学习笔记,参考《计算机网络 - 自顶向下方法》。 # 计算机网络和因特网 这章内容涉及许多层,相当于一个大的概括,之后才会解析每个层次的内容。 # 计算机网络 # 因特网构成描述 因特网是一个世界范围的计算机网络,即它是一个互联了遍及全世界数十亿计算设备的网络,也被称为 “网中网”,我们现在使用的网络都是大网中的小网。 接入网络的设备 —— 网络边缘 网络边缘是靠近最终用户并直接连接到网络核心的子网。 网络边缘设备的示例包括 WiFi 接入点、带有配线间交换机的分支机构和个人计算机。 与因特网相连的计算机和其他设备称为端系统(end...
2.7k 2 分钟

# 二进制小数的表示 与十进制小数一样,二进制小数点左边为正幂,小数点右边为负幂,幂的底数为 2。 # 二进制小数与十进制转换 二进制转十进制 二进制 (101.11)2(101.11)_2(101.11)2​ 表示数字...
1.1k 1 分钟

# 为什么 C 语言中 int 数据使用 %f 打印输出结果为 0? 前言 最近在社团出招新试题,朋友出了一道 C 语言题,我在帮写答案的时候发现这个题目有点意思。 题目如下: int main(){ int i=1; printf("%f\n",i); }输出: -1解释出现这种情况的原因? 答: %f 是把数据以 double 格式打印出来的, int 和 double 的格式不一样。不过,C99 之后可以也可以使用 %lf 来输出 double 。 int 是准确值,而 double 是精确值,准确转精确会精度丢失。 int...
2.9k 3 分钟

# 舍入运算 舍入运算是我们平时使用的比较多的运算,最近看 CSAPP 学到了一些关于舍入运算的更详细的内容,在这里记录一下。 # 舍入方式 IEEE754 定义了四种不同的舍入方式: 向偶数舍入 向零舍入 向下舍入 向上舍入 IEEE754 默认采用向偶数舍入,用来找到最接近的匹配近似值。而其他三种方式则用于计算上下界。 下表是按照四种不同的方式保留整数后的舍入结果(图与 CSAPP 上一致): 我这里只讨论向偶数舍入,其他舍入方式还是比较容易理解的。 我在看这个示例的时候,看到 1.40 向偶数舍入结果是 1...
8.3k 8 分钟

# Linux 是什么? Linux® 是一个开源的操作系统(OS)。它由 Linus Torvalds 于 1991 年构思设计而成,最初这只是他的一项兴趣爱好。当时还在读大学的 Linus 想要基于 Unix(是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由肯・汤普逊、丹尼斯・里奇和道格拉斯・麦克罗伊于 1969 年在 AT&T 的贝尔实验室开发。) 的原则和设计来创建一个免费的开源(指源代码可以任意获取的计算机软件,任何人都能查看、修改和分发他们认为合适的代码)系统,从而代替 MINIX...
4.2k 4 分钟

# 编译 Openwrt 固件 前提条件: 具有 Linux 系统,我使用的是 WSL,WSL 的安装可以去官网看:Install WSL | Microsoft Docs 注意:使用 Linux 系统编译是不能直接使用 root 用户的,WSL 默认使用的不是 root 用户。 关于 Linux 用户管理可以看看我写的这篇文章:Linux 用户管理 - Linux | xun = 不失去热情 = 碎碎念 (asukaxun.com) 建议使用代理,不然下载可能会有点慢。(WSL 的代理配置可以看看这篇文章:Windows Subsystem for Linux 配置记录 |...
4.1k 4 分钟

# 使用 GitHub Actions 自动化部署你的项目 # 前言 最近写完了一个项目的后端部分,所以要部署到服务器上给前端调用接口,然后又因为前端调用接口的时候时不时出现一些问题就需要改代码,每次改完代码又需要重新部署项目到服务器,属实麻烦,于是我们的诺天大佬就利用 GitHub Actions 实现自动化部署。我也趁这个机会学习了一波把这个东西用到自己的项目上。 不过这东西还真是香啊,被微软收购的 Github 真是财大气粗。 # 组成 GitHub Actions 由四个部分组成: workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。 job...
7.6k 7 分钟

# Git 基础 ——— 创建仓库及提交更新 # 创建仓库 有两种创建仓库的方法: 将没有进行版本控制的本地目录转换为 Git 仓库; 从其他服务器克隆一个已存在的 Git 仓库。 我们就可以从 GitHub 上使用 'git clone' 这个命令克隆一个 Git 仓库。 # 在没有进行版本控制的本地目录初始化仓库 进入到你想进行版本控制的目录,使用以下命令: $ git init这个命令会创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 使用 git add...
712 1 分钟

# Git 基础 ——Git 项目的三个阶段 # Git 的三种状态 Git 有三种状态,已提交(committed)、已修改(modified) 和 已暂存(staged)。 已修改表示修改了文件,但还没保存到数据库中。 数据库,Git 的数据库分为远程数据库和本地数据库。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 已提交表示数据已经安全地保存在本地数据库中。 如果 Git 目录(仓库)中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改...