网站制作的预算,可以看国外网站的dns,显示官网字样的网站怎么做,建个网站平台需要多少钱文章目录 真值和机器数 无符号整数无符号整数的定义无符号整数的特征无符号整数的表示范围无符号整数的加法无符号数的减法 有符号整数(定点整数)有符号整数的定义原码原码的特点反码反码的特点补码补码的特点快速求解n位负数补码的方法为什么补码能够多表示一个范围(重点)变形… 文章目录 真值和机器数 无符号整数无符号整数的定义无符号整数的特征无符号整数的表示范围无符号整数的加法无符号数的减法 有符号整数(定点整数)有符号整数的定义原码原码的特点反码反码的特点补码补码的特点快速求解n位负数补码的方法为什么补码能够多表示一个范围(重点)变形补码移码移码的特点有符号数无符号整数的范围表示判断两个数的和是否溢出无符号数和有符号数如何进行减法运算原码反码移码补码的互相转换定点小数定点整数和定点小数的原码定义定点小数和定点整数的补码定义移码的定义(目前还不懂)可表示的不同数字的个数 和 可表示范围原码反码补码表示的定点小数个数负数反码和补码比较大小的方式(重要)一个数什么时候可能会溢出关于原反补运算的特点十六进制数的取反 真值和机器数 真值在日常的书写习惯中往往用正、负号加绝对值表示数值用这种形式表示的数值为真值。例如100D-50D-76O。 机器数在计算机内部版使用的数并且最高位表示符号的二进制数又分为有符号数和无符号数。 无符号整数
无符号整数的定义 无符号整数无符号整数即最高位不表示符号位每一位都是数值位。 无符号整数的特征 无符号整数一般用来表示地址或者指针因为地址不具有负的概念。 无符号整数的表示范围
n位的无符号整数可表示 0 \color{red}{0} 0~ 2 n − 1 \color{red}{2^n-1} 2n−1的范围。
无符号整数的加法
无符号整数的加法和普通的二进制加法没什么区别。
无符号数的减法
假设我们的mod是18那么假设一个数是x其在mod18下的补数就是18-x。 通过这种手段我们可以将减法变成加法前提是被减数减数即不溢出的情况下可以得到正确的答案例如9-3[9(18-3)]mod18(915)mod18(24)mod186。 而在无符号数的加法中寄存器的位数实际上就已经充当了mod的作用例如n位那么mod就是 2 n \color{red}{2^n} 2n。 通过将B全部位取反末尾加1我们就可以得到B的补数。这个过程就和得到补码C对应-C的补码的过程一样。 其中通过这种方式得到补数的原理是这样的因为AA的补数mod。 而B全部位取反B就等于一个全1的序列那么再将上1自然就等于mod了。 所以取反1就为补数。
有符号整数(定点整数)
有符号整数的定义 定点整数定点整数是纯整数简单来说就是不含小数小数点在数值位之后。 若数据X的表示形式为X x 0 , x 1 x 2 . . . x n \color{red}{x_0,x_1x_2...x_n} x0,x1x2...xn其中 x 0 \color{red}{x_0} x0是符号位剩下的数值位 x 1 \color{red}{x_1} x1~ x n \color{red}{x_n} xn是尾数 x n \color{red}{x_n} xn为最低有效位。 有符号整数分为原码反码补码移码。 原码 原码最高位表示符号位具有位权可表示整数和小数。 原码的特点 优点和真值的对应关系简单直观与真值的转换简单用原码实现乘除运算比较简便无论是正数原码还是负数原码比较大小很容易判断。 缺点 1.0的表示不唯一有两种方式表示真值0分别是(0)00000000和(-0)10000000 2.加减法运算比较复杂这很好理解如果不复杂当前计算机就不会使用补码运算了。 3.符号位不可以参与运算 反码 反码最高位表示符号位正数反码具有位权负数反码无位权,可表示整数和小数。 反码的特点 缺点 1.0的表示不唯一00000000(0)和11111111(-0) 2.表示范围比补码小在计算机中很少使用一般用作数码变换的中间形式(其实也就是原反补变换的中间形式) 4.符号位不可以参与运算 补码 最高位表示符号位正数补码具有位权负数补码无位权。可表示整数和小数。 补码的特点 优点 0的表示唯一即0(00000000) 符号位和数值位可以参与运算 缺点 负数补码不容易判断大小。 快速求解n位负数补码的方法 这里的最高位就是符号位因为负数补码的符号位固定为1所以假设总共有4位。可以看出真值 − 2 n \color{red}{-2^n} −2n的补码就是按照权重找到对应位然后将这一位和这一位左边全置1就能得到。 并且还能看出一个特征即负数补码的数值位越大真值越大。 对于补码小数上面的结论还能成立
为什么补码能够多表示一个范围(重点)
首先前提是机器字长为8位原码和反码在表示过程中是一一对应的但是两者都具有一个冗余状态原码的1000000和反码的11111111这两个冗余状态通过原反补转换成补码时因为溢出原因会变成0000 0000这就导致补码中的0只有一种表示方式这就导致补码的1000 0000这个状态没有数字可以表示但是通过原反补的规则因为溢出问题的存储原码和反码的任何一个状态都不可能转换为1000 0000所以计算机规定原码为1000 0000和反码的1111 1111转换为补码时直接映射成1000 0000补码的1000 0000不需要经过原反补转换解释的时候直接解释为1000 0000。
变形补码
移码 移码不具有位权常用来表示浮点数的阶码只能表示整数。 移码的特点
优点 1.只有一种方式表示0即(0)1000 0000。 2.符号位为1表示真值为正符号位为0表示真值为负。 3.从下面这个图可以看出移码的递增有点类似无符号整数所以移码很方便硬件电路对比大小。 x的移码和-x的移码转变似乎也是全部位按位取反末尾加1这个不知道准不准确。
有符号数无符号整数的范围表示 注意定点小数虽然说能够表示这么大的范围但是不是范围里的每个数字都能够使用定点小数准确表示出来因为其不是和定点整数一样从0开始每次递增的。 定点整数中补码比原码和反码多表示一个 − 2 n \color{red}{-2^n} −2n注意是只多表示这一个数字因为二进制整数每次的差距至少为1 定点小数中补码比原码和反码同样也只是多表示了-1这一个数字。 一定要注意这里是只不论是定点整数还是小数补码都只是比原码多表示了一个数字。 判断两个数的和是否溢出 题目一机器字长8位两个数字用原码表示A是原码表示的-64B是原码表示的-64两者的结果同样用原码表示是否会溢出 答案是会的因为原码只能表示-127-127 题目二机器字长8位两个数字用补码表示A是补码表示的-64B是补码表示的-64两者的结果同样用补码表示是否会溢出 答案是不会因为补码可以表示-128127 无符号数和有符号数如何进行减法运算
无论是无符号整数还有补码 在求-x的时候都是如下的操作。 方法将减数进行求补然后将负号改为正号被减数和求补以后的减数相加。
求补有两种方法 方法一全部位按位取反末尾1 方法二从右往左找到第一个1将这个1左侧的所有位(不包括这个1)全部取反。 为什么要使用加法电路来完成减法 加法电路造价便宜判断比较容易。 事实上无符号的减法我们不是一定要通过上述方式完成因为无符号是不具有符号位的上述方式是计算机内部无符号的计算方式如果是我们手算我们可以直接两个数相减即可。不用进行什么取补然后减法变加法的操作。
原码反码移码补码的互相转换 定点小数 定点小数定点小数是纯小数简单来说就是不含整数小数点在符号位之后数值位之前。若数据X的表示形式为X x 0 , x 1 x 2 . . . x n \color{red}{x_0,x_1x_2...x_n} x0,x1x2...xn其中 x 0 \color{red}{x_0} x0是符号位剩下的数值位 x 1 \color{red}{x_1} x1~ x n \color{red}{x_n} xn是尾数 x 1 \color{red}{x_1} x1为最高有效位。 定点整数和定点小数的原码定义 纯小数(假设机器字长为n1位) 当 x ≥ 0 \color{red}{x \geq 0} x≥0 时当 x ≥ 0 \color{red}{x \geq 0} x≥0 时 x \color{red}{x} x的原码可由真值 x \color{red}{x} x通过二进制转换得到。 当 x ≤ 0 \color{red}{x \leq 0} x≤0 时 x \color{red}{x} x的原码需要由 1 ∣ x ∣ \color{red}{1|x|} 1∣x∣以后的真值通过二进制转换得来。 当真值等于0的时候因为定点小数的原码具有两种形式所以同样可以使用上述两种方式分别是0000000和10000000
例如 当机器字长为8位时当x0.5时其原码由0.5转换而来结果为0.1000000 当x-0.5时其原码由1-(-0.5)10.51.5转换而来结果为1.1000000 纯整数(假设机器字长为n1位) 当 x ≥ 0 \color{red}{x \geq 0} x≥0 时 x \color{red}{x} x的原码可由真值 x \color{red}{x} x通过二进制转换得到。 当 x ≤ 0 \color{red}{x \leq 0} x≤0 时 x \color{red}{x} x的原码需要由 2 n ∣ x ∣ \color{red}{2^n|x|} 2n∣x∣以后的真值通过二进制转换得来。 真值为正时很好理解可以直接通过二进制转换得到原码。 真值为负时因为符号的原因所以需要对真值取绝对值并且加上 2 n \color{red}{2^n} 2n其本质就是加上二进制最高位的符号位。 当真值等于0时因为定点原码的真值具有两种表现形式00000000和1000000所以真值0变成原码的时候也可以使用上述两种方式。 例如 当机器字长为8时当x5时5的原码由真值5转换得来结果为为0.0000101 当x-5时-5的原码由 2 8 − ( − 5 ) 2 8 5 \color{red}{2^8-(-5)2^85 } 28−(−5)285真值转换而来结果为 1.0000101
总结 真值为正时原码可以由真值直接转换得来。
真值为负时需要对真值取绝对值并加上对应机器字长二进制对应的符号位小数就直接加上1即可整数就加上二进制最高位对应的真值。然后用真值转换成原码。 本质都是通过真值加上某个数从而修改对应二进制的符号位将符号位的0变成1。
这里的定义其实本质上就是如果通过真值不考虑符号位的情况下直接转换二进制得到对应的原码。因为实际上真值为负时我们可以通过符号位取1的方式然后按照原反补的方式得到原码而这种定义方式就是不靠这种方法因为最终通过定义真值变成了正数这时候就不需要考虑符号位了并且因为正数的原反补相同。
定点小数和定点整数的补码定义
假设机器字长为n1位。 定点整数的补码定义 当真值为正时补码直接由真值通过二进制转换得到 当真值为负时补码需要由 2 n 1 − ∣ 真值 ∣ \color{red}{2^{n1}-|真值| } 2n1−∣真值∣的结果通过二进制转换得到。 实际上就是mod-真值的绝对值。当有n位时mod就是 2 n \color{red}{2^n} 2n 这里的定义其实本质上就是如果通过真值不考虑符号位的情况下直接转换二进制得到对应的补码。因为实际上真值为负时我们可以通过符号位取1的方式然后按照原反补的方式得到补码而这种定义方式就是不靠这种方法。因为最终通过定义真值变成了正数这时候就不需要考虑符号位了并且因为正数的原反补相同。
移码的定义(目前还不懂)
移码本质就是加了一个偏执常量当机器字长为n1时真值为x的移码需要由x 2 n \color{red}{2^{n}} 2n转换得到。这时偏执常量就是 2 n \color{red}{2^n} 2n
可表示的不同数字的个数 和 可表示范围
可表示的数字个数是站在状态上来进行思考的一个二进制可以表示2种状态n个二进制位就可以表示 2 n \color{red}{2^n} 2n个状态当然原码和反码会少1个。 可表示的范围是站在位权来进行考虑的因为二进制的位权是从0开始只有正/负原码正数反码和补码可以这样计算使用位权来计算范围。但是负数的补码和反码不能这样计算范围因为其没有位权这个。
原码反码补码表示的定点小数个数
假设机器字长为n1站在状态的角度上可以表示 2 n 2 n \color{red}{2^n2^n} 2n2n个状态但是由于0有两种表示所以有状态重叠所以只能表示 2 n 2 n 2 n 1 − 1 个不同数字 \color{red}{2^n2^n2^{n1}-1个不同数字} 2n2n2n1−1个不同数字反码也是如此。 补码因为没有状态重叠所以可以表示 2 n 1 \color{red}{2^{n1}} 2n1个不同的状态。
负数反码和补码比较大小的方式(重要)
负数反码和原码比较只需要遵循一个原则数值位越大真值越大。
一个数什么时候可能会溢出
一个数只有在全1的时候再加1或者大于1的数才会溢出。
关于原反补运算的特点
实际上正数原码和反码补码的符号位都可以参与运算因为补码的符号位可以参与运算所以正数原码和反码也可以但是负数的原码和反码无法做到符号位参与运算所以计算机中的加减法在不对符号位处理的前提下只能由补码完成。
十六进制数的取反
十六进制数数位的取反15-该数位的数字 例如F1取反以后变成0E。