补码

补码

两盒软妹~` 提交于 2019-11-28 19:26:40
计算机中为什么使用补码: https://blog.csdn.net/ftl111/article/details/79910835 补码图: 总结: 人喜欢原码(容易看),计算机喜欢补码(方便计算)! 来源: https://www.cnblogs.com/zach0812/p/11422697.html

位运算[转载]

大憨熊 提交于 2019-11-28 19:16:31
位运算 位运算 首先 补码 按位与(&) 按位或(|) 按位异或(^) 左移(<<) 右移(>>) 取反(~) 首先 要明白位运算是在二进制中的运算方式,所有其他进制的数在进行位运算时都要先转化成二进制数再进行运算。 位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反( ~ )、左移(<<)、右移(>>)这几种。 其中除了取反( ~ )以外,其他的都是二目运算符,即要求运算符左右两侧均有一个运算量。 补码 补码是为了表示一个负数的二进制形式。 其转化方式是先将负数当成正数转化成二进制的形式再将二进制正数的各个位上取反再加上一。 例如-5 先求出5的二进制数 : 0000 0000 0101 然后将各个位上0变1,1变0 : 1111 1111 1010 最后再加1 : 1111 1111 1011 这里5二进制下是101表示时前面全是0,这里省略就只写了几个意思一下^ _ ^ 按位与(&) 运算的两个数,转换算为二进制后,进行与(&)运算。 当相应位上的数都是1时,该位取1,否则该为0。 例如5 & -5 5 : 0000 0000 0101 -5 :1111 1111 1011 答案 : 0000 0000 0001 按位或(|) 运算的两个数,转换为二进制后,进行或(|)运算。 只要相应位上存在1,那么该位就取1,如果都不为1,就为0。 还是5 | -5 0000

漫谈计算机组成原理(九)定点数及定点数的运算

痴心易碎 提交于 2019-11-28 16:02:30
本文讲什么? 在计算机中,小数点并没有用专门的器件去表示,而是按照一种约定的方式,统一存储在寄存器单元中的。算数逻辑运算单元(ALU)是CPU的组成部分,负责算数和逻辑的运算。那么,ALU究竟是如何工作的呢? 这就是本文主要探讨的内容: 什么是定点数? 定点数的位移、加、减、乘、除运算是如何进行的? 定点数是啥? 从字面意思来理解,“定点数”就是“点”不动的数。那么究竟是什么“点”不动呢?没错,就是“小数点”。 在上一讲我们说道,不论是整数还是小数,都是有小数点的。 整数的小数点表示在最后一位数字的后面,而小数的小数点标识在真值的符号位后面。 如图所示: 除了定点数,还有一种数叫做“浮点数”,浮点数将在下一讲展开介绍。 定点数的运算 好了,介绍完定点数的基本概念以后,我们展开讲定点数的位移运算和四则运算。定点数的四则运算实际上要比我们想象的复杂的多。 机器并不像人,一眼就知道二二得四,他需要知道2的定点表示形式,然后两个定点数相乘,相乘是有一定的过程的,经过了这个过程,才能得到结果的二进制数,最终输出给我们。 我们要做的,就是了解加减乘除究竟经历了什么样子的过程 。 定点数的位移运算 不要看移位运算简单,但是它在计算机的运算中的地位是举足轻重的。没有移位运算,也就没有后面的乘除法,乘除法就是在移位运算和加减运算的配合下实现的。 移位运算的规则: 虽然正数和负数的移位运算规则不相同

Java中的位运算符 &、|、^、~、<< 和 >>

青春壹個敷衍的年華 提交于 2019-11-28 12:53:02
一、& 按位与运算符 5 & 3 = 1 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011 规则:对应的两个二进制位都为1时,结果位就为1,其他情况都为0。 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 二、| 按位或运算符 5 | 3 = 7 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011 规则:只要对应的二个二进位有一个为1时,结果位就为1。 1 | 1 = 1 1 | 0 = 1 0 | 1 = 1 0 | 0 = 0 三、^ 按位异或 运算符 5 ^ 3 = 6 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011 异或的运算法则: 0 ⊕ 0 = 0,1 ⊕ 0 = 1,0 ⊕ 1 = 1,1 ⊕ 1 = 0(相同为0,不同为1) 这些法则与加法是相同的,只是 不带进位 ,所以异或常被认作不进位加法。 四、~

为什么一个byte的存储范围是-128~127?

狂风中的少年 提交于 2019-11-28 09:57:37
为什么一个byte的存储范围是-128~127? 文本关键字:byte、字节、二进制位、反码、补码 一、byte 在计算机中,一个二进制位是最小的存储单元,由于是二进制,所以能存储的数字只能是0和1。显然,如果我们直接去操作每个二进制位将是很麻烦的过程,所以在编程中我们直接使用的是其他的数据类型,如:byte、int、float。这些数据类型能够使我们的数据存储更加方便,我们只需要关心他们能够存储多大范围和什么样类型的数据就可以了。 那么一个byte,也就是我们所说的一字节,他所占用的空间是8个二进制位。 1 byte = 8 bit(比特) 这8个bit就是8个二进制位,其中有一个是符号为,刚好可以用0和1来代表正负。那么这8个二进制位到底能够表示多大范围的数字呢?对于正数的进制转换相信难不倒大家,也可以参考底部的相关文章,我们先来看一下负数在二进制下是如何表示和转换的。 二、反码与补码 首先把公式立在这里: 正数的补码 = 原码 = 反码 负数的补码 = 反码 + 1 那么首先什么是原码呢?很简单,在我们不考虑符号的情况下,按照进制的转换方法将一个十进制数转换为二进制数,再添加上相应的符号位就完成了。符号位出现在最前(左)面一位,0代表正数,1代表负数。 +3 -> 11 -> 根据符号和byte长度补全:0000 0011 -5 -> 101 -> 根据符号和byte长度补全

机器码相关

廉价感情. 提交于 2019-11-28 05:36:26
机器数:一个数在计算机中的二进制表示形式 真 值:将带符号位的机器数对应的真正数值称为机器数的真值。 定点数:参与运算的数的小数点位置固定不变。 浮点数:一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到 移码(增码):在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置。引入移码的目的是为了保证浮点数的机器零为全0。 正数的反码=原码,负数的反码=符号位不变+其余每一位按位取反。 正数的补码=原码,负数的补码=反码+1 正负数的移码=将其补码的符号位取反 0000 0001 1 原码 0000 0001 反码 0000 0001 补码 1000 0001 移码 1000 0001 -1 原码 1111 1110 反码 1111 1111 补码 0111 1111 移码 来源: https://www.cnblogs.com/mrerror/p/11394420.html

一文搞懂补码

落爺英雄遲暮 提交于 2019-11-28 04:18:19
一文搞懂补码 前言 ​ 在学习计算机组成原理时经常接触到补码,我们知道计算机使用补码来表示负数,并且负数的补码按位取反再加一是他对应的正数。但是我们往往知道的也就仅限于此,其原理和原因似乎不被重视。像这样对一些概念浮于表面的后果就是,当涉及到这个概念更深层次的问题时,我们原有的理解就会变得促膝见肘,一些现象无法从已有的知识解释。而当我们再次深层次的去挖掘原理时,就会发现,其背后往往是数学在施展魔法。 如何用加法代替减法 ​ 首先,为什么计算机不直接计算减法?如果计算机在底层可以直接进行两个数的减法计算,那么就不需要补码什么事了。原因也很简单,纯粹的二进制减法实现起来相当复杂。而使用补码可以将减法通通转化成加法计算,CPU 对于执行加法运算非常快速且简单,而且如此一来计算机就可以透明的计算加减法。 表盘模型 ​ 那么,怎么实现加法代替减法呢?我们可以参考时钟的表盘。 ​ 假如我们有 0~9 共 10 个数,他们被均匀刻在一个表盘上: 我们可以在上面取到 0 ~ 9 共 10 个刻度(每个刻度表示某个范围内的每个整数,比如0~255,这里简便起见只考虑 0~9),表盘上的指针可以从一个刻度拨动到下一个刻度。从任意一个刻度朝固定方向连续移动 D = 10 次,指针将再次指向出发刻度。现在我们讨论如何在上面表示负数。假设在圆盘上从 0 刻度顺时针移动一次,有 a = 1 (a 指向刻度 1

为什么需要定义数据类型???

假如想象 提交于 2019-11-28 03:58:30
变量和数据类型难舍难分,思考了好久,得出下面这个结论: 变量是内存中的一个存储区域。而数据类型的定义决定了这块存储区域的大小。 【变量与数据类型的关系】 为什么需要定义变量存储区域的大小? 以结果为导向来分析: Java的整数类型分为4种:byte,short,int,long。 四种的区别在于占用的存储空间不一样。 byte占用1个字节,short占用2个字节,int占用4个字节,而long占用8个字节。 什么是字节? 字节是一种存储单位的度量。1个字节等于8位。 什么是位呢? 位可以理解为计算机的最小单位:0或者是1。也就是是说1个字节是8个0和1的排列组合: 比如说:00000000,00000001,00000011,......11111111。 那么在这种情况下1个字节可以表示多大的数呢? 00000000转换为十进制依然是0,11111111转换为十进制是255。 转换工具: https://tool.lu/hexconvert/ 也就是说,一个字节最大可以表示255而最小1可以表示0。 这是无符号位的情况,如果8位表示正数和负数,那么8位可以表示的范围是多大呢? 通常情况下,用第一位来表示正负【0为正,1为负】,这样算下来8位可以表示的范围是-127到+127。 历史长河中,补码登场 上述引入符号位的8位二进制数可以理解为原码。对于正数来说,原码就是补码

java基础终极总结(一)

南笙酒味 提交于 2019-11-28 00:43:00
Java各种码的转化 ... 1 进制 ... 2 名规则四大类: ... 2 和字符串做运算: ... 3 讨论this&super这两个关键字的意义和用法。 ... 4 Java命名规则 ... 4 Java中有关Null的9件事 ... 4 int和Integer有什么区别? . 5 Chacter常用方法 ... 7 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 ... 7 编译 ... 7 JDK,JRE,JVM区别与联系? ... 8 JVM的内存空间: (1). Heap 堆空间:分配对象 new Student() (2). Stack 栈空间:临时变量Student stu (3).Code 代码区 :类的定义,静态资源Student.class . 8 算数运算符、关系运算符、逻辑运算符、位运算符 ... 9 运算符的优先级 ... 9 位运算符: ... 10 Java中关键字continue、break和return的区别: ... 12 Scanner 与bufferdRead的区别; ... 14 数据类型与特点 ... 15 循环语句 ... 17 Static . 18 方法中调用另一个方法 ... 18 Java随机数的产生方式 ... 18 变量;成员变量,局部变量 ... 19 实体: ... 20

补码原理——负数为什么要用补码表示

☆樱花仙子☆ 提交于 2019-11-27 18:56:17
本文链接:https://blog.csdn.net/leonliu06/article/details/78685197 文首   我们都知道负数在计算机中是以补码(忘了补码定义的戳这里)表示的,那为什么呢?本文尝试了解补码的原理,而要想理解它,首先得理解算术中“模”的概念。所以首先看一下什么是模,然后通过一个小例子来理解补码。 1 模(Modulo) 1.1 什么是模数 In mathematics, modular arithmetic is a system of arithmetic for integers, where numbers “wrap around” upon reaching a certain value—the modulus (plural moduli). 1.1.1 理解   模是指一个计量系统的计数范围。如时钟等。计算机也是一个计算器,它也是有一个计量范围,即都存在一个“模”。   如时钟的计量范围是0~11,模 = 12。   32位计算机的计量范围是2^32,模 = 2^32。   “模”是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数,如12的余数有0,1,2,3,4,5,6,7,8,9,10,11。 1.2 补数   假设当前时针指向11点,而准确时间是8点,调整时间可有以下两种拨法: 一种是倒拨3小时