计算机中的数字

计算机中的数字是如何表示的 由于计算机所使用的硬件特性,导致了在计算机的底层数字只能以二进制的形式进行表达。二进制和十进制一样,也是一种进位计数制,但是它的基数是 2。二进制表达式中 0 和 1 的位置不同,它所代表的数值也不同。例如,二进制数 0000 1010 表示十进制数 10。一个二进制数具有两个基本特点:两个不同的数字符号,即 0 和 1,逢二进一。 关于二进制的维基百科解释 无符号数 无符号数顾名思义就是单纯的数字,没有正负号也没有小数点,是非负整数。这一类型的数字表示起来最简单,只需用二进制的方式写出即可。 为了更加清楚的解释无符号数的表示方法CSAPP中介绍了一种图形化的表示方法来帮助读者理解无符号数的编码方式。 二进制数从右往左的第i位即表示为$2^{i-1}$,将不为0的项相加得到所表示的无符号数。 有符号数 在现实世界中,无符号数的局限性是相当大的,那么拥有正负号的数字该如何进行编码呢? 计算机中使用补码来表示有符号数,简单的来说就是在无符号数表示方法的基础上新增了一个符号位以表示正负。最高位若为0则表示正数,最高位若为1则表示负数。需要注意的是,符号位并不是单纯的表示数的正负性,它代表负权重的概念。 若一个有符号数的二进制形式如下: 那么它的十进制的计算方法为: 两个例子: 为了便于理解,补码也有对应的图形化表示方式: 其中蓝色代表正数,灰色代表负数,由图可知当最高位为1时得到的必定为负数。 数字的表示范围 无符号数的表示范围 对于无符号数,当字长为n时,其能表示的最大数为:$$1\times 2^{0} +1\times 2^{1} +\dots +1\times 2^{n-1} =2^{n} -1$$ 字长为8到64的无符号数所能表示的范围图表: 有符号数的表示范围 有符号数与无符号数的区别在于其最高位充当符号位,所以只有n-1位能够表示数的大小。 所能表示的最大值为:$$1\times 2^{0} +1\times 2^{1} +\dots +1\times 2^{n-2} - 0\times 2^{n-1} =2^{n-1} -1$$ 所能表示的最小值为:$$0\times 2^{0} +0\times 2^{1} +\dots +0\times 2^{n-2} - 1\times 2^{n-1} =-2^{n-1}$$ 无符号数与有符号数之间的转换 对于一个二进制数:$$x_{w-1}x_{w-2}\dots x_{1} x_{0}$$ 其对应的无符号数:$$U=x_{w-1}\times 2^{w-1} +x_{w-2}\times 2^{w-2} +\dots +x_{0}\times 2^{0}$$...

七月 27, 2022 · Howe

Git基础命令

获取 Git 仓库 通常有两种获取 Git 项目仓库的方式: 将尚未进行版本控制的本地目录转换为 Git 仓库; 从其它服务器克隆一个已存在的 Git 仓库。 两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。 在已存在目录中初始化仓库 git init 该命令将创建一个名为 .git的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。 克隆现有的仓库 克隆仓库的命令是 git clone <url>。比如,要克隆 Git 的链接库libgit2,可以用下面的命令: git clone https://github.com/libgit2/libgit2 这会在当前目录下创建一个名为libgit2的目录,并在这个目录下初始化一个 .git文件夹, 从远程仓库拉取下所有数据放入 .git文件夹,然后从中读取最新版本的文件的拷贝。 如果你进入到这个新建的 libgit2文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。 如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以通过额外的参数指定新的目录名: git clone https://github.com/libgit2/libgit2 mylibgit 这会执行与上一条命令相同的操作,但目标目录名变为了mylibgit。 记录每次更新到仓库 现在我们的机器上有了一个真实项目的 Git 仓库,并从这个仓库中检出了所有文件的工作副本。 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。 请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪(tracked)或未跟踪(untracked)。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。 工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git刚刚检出了它们, 而你尚未编辑过它们。 编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 在工作时,你可以选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改,如此反复。 检查当前文件状态 可以用 git status命令查看哪些文件处于什么状态。如果在克隆仓库后立即使用此命令,会看到类似这样的输出: $ git status On branch master Your branch is up-to-date with 'origin/master'....

四月 8, 2022 · Howe

SQL语句笔记

本文所使用的数据库 //学生:学号S#, 姓名Sname, 性别Ssex, 年龄Sage, 所属系别D#,班级Sclass Student (S# char(8),Sname char(10),Ssex char(2),Sage integer,D# char(2),Sclass char(6)) //院系:系别D#,系名Dname, 系主任Dean Dept (D# char(2),Dname char(10),Dean char(10)) //课程:课号C#, 课名Cname, 教师编号T#, 学时Chours,学分Credit Course (C# char(3),Cname char(12),Chours integer,Credit float(1),T# char(3)) //教师:教师编号T#,教师名Tname, 所属院系D#,工资Salary Teacher (T# char(3),Tname char(10),D# char(2),Salary float(2)) //选课:学号S#, 课号C#, 成绩Score SC (S# char(8),C# char(3),Score float(1)) 建立数据库 定义数据库和表 创建Database 数据库(Database)是若干具有相互关联关系的Table/Relation的集合 数据库可以看作是一个集中存放若干Table的大型文件 创建数据库的简单语法形式: create database 数据库名; 示例:创建课程学习数据库SCT create database SCT; 创建Table 创建table简单语法形式: Create table 表名(列名 数据类型[Primary key|Unique][Notnull][, 列名 数据类型[Primary key|Unique][Notnull] , ....

三月 30, 2022 · Howe