原码

原码、补码和反码

萝らか妹 提交于 2019-11-29 15:13:55
数在计算机中是以二进制形式表示的。 数分为有符号数和无符号数。 原码、反码、补码都是有符号定点数的表示方法。 一个有符号定点数的最高位为符号位,0是正,1是副。 以下都以8位整数为例, 原码就是这个数本身的二进制形式。 例如 0000001 就是+1 1000001 就是-1 正数的反码和补码都是和原码相同。 负数的反码是将其原码除符号位之外的各位求反 [-3]反=[10000011]反=11111100 负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。 [-3]补=[10000011]补=11111101 一个数和它的补码是可逆的。 为什么要设立补码呢? 第一是为了能让计算机执行减法: [a-b]补=a补+(-b)补 第二个原因是为了统一正0和负0 正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示。 但是他们的补码是一样的,都是00000000 特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!) [10000000]补 =[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符号位变成了0) 有人会问 10000000这个补码表示的哪个数的补码呢? 其实这是一个规定,这个数表示的是-128 所以n位补码能表示的范围是 -2^(n-1

二进制整数及其表达方式

断了今生、忘了曾经 提交于 2019-11-29 10:12:50
回去又复习了一遍计算机里面二进制整数的表示方式,主要分为3类:原码、反码和补码。 当然,我还是要在开头说明一下,计算机里都是以 补码 的形式储存数据。 原码 这种方式最好理解,将我十进制的“逢十进一”换成二进制的“逢二进一”就行了。 具体如何做呢?还是介绍一下十进制和二进制的转换方式吧。 二进制转换十进制 话不多说,直接写公式,“按权展开求和”: 十进制转二进制 按照套路来,用"除2取余,逆序排列"的方法。 举个栗子:789转换成二进制 1.除二取余 计算 余数 位数 789/2=394 余1 第10位 394/2=197 余0 第9位 197/2=98 余1 第8位 98/2=49 余0 第7位 49/2=24 余1 第6位 24/2=12 余0 第5位 12/2=6 余0 第4位 6/2=3 余0 第3位 3/2=1 余1 第2位 1/2得0 余1 第1位 2.逆序排列余数得到结果 789=1100010101(B) 后面括号里的B代表该数为二进制 计算机里为什么要用二进制码来表示数据 1、技术实现简单。计算机是由逻辑电路组成,逻辑电路通常只有两种状态,开关的接通和断开,正好用“0”“1”表示。 2、运算规则简单,两个二进制数的和、积运算组合简单。 3、适合逻辑运算,二进制只有两个数码,和逻辑代数中的“真”“假”相吻合。 4、易于进行转换,二进制和十进制数转换简单。 -----

软件设计师考试之计算机系统知识学习

二次信任 提交于 2019-11-28 19:49:11
概要 考试前提 计算机系统硬件基本组成 计算机系统硬件组成 计算机系统由软件和硬件组成。 硬件系统主要由,运算器,控制器,存储器,输入设备,输出设备。五部分组成。 其中运算器和控制器被集成在CPU中,他们和存储器一起协调工作类似于人们的脑子;其中输入设备如键盘,鼠标,类似于人们的眼睛和耳朵;输出设备,显示器,类似于人的手和嘴。 中央处理器 CPU :取指令 分析指令 执行指令 CPU的功能: 程序控制,操作控制,时间控制,数据处理。 CPU的组成:cpu主要由运算器,控制器,寄存器和内部总线组成。 运算器 作用: 数据处理,完成算术运算和逻辑运算 组成: 算术逻辑单元(ALU) ,累加寄存器(AC),数据缓冲寄存器(DR),状态条件寄存器(PSW)等 控制器 作用: 控制CUP的工作,指令控制逻辑,时序控制逻辑,中断控制逻辑。 指令控制逻辑: 取指令,分析指令,执行指令 指令寄存器(IR):暂存从内存储器取到缓冲寄存器中的指令 程序计数器(PC):寄存信息和计数 地址寄存器(AR):保存当前CPU所访问的内存单元的地址。 指令译码器(ID):对操作码字段进行分析解释和识别该指令规定的操作,向操作控制器发出具体的控制信号,控制各个部件工作,完成所需的功能。 时序控制逻辑: 为每条指令按时间提供应有的控制信号。 中断控制逻辑: 用于控制各种中断 运算器受控制器控制 多核cpu 不是重点

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

痴心易碎 提交于 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 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

原码、反码、补码,计算机中负数的表示

霸气de小男生 提交于 2019-11-27 10:12:14
原码:将一个整数,转换成二进制,就是其原码。 如单字节的5的原码为:0000 0101;-5的原码为1000 0101。  反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。 如单字节的5的反码为:0000 0101;-5的反码为1111 1010。  补码:正数的补码就是其原码;负数的反码+1就是补码。 如单字节的5的补码为:0000 0101;-5的原码为1111 1011。   在计算机中,正数是直接用原码表示的,如单字节5,在计算机中就表示为:0000 0101。 负数用补码表示,如单字节-5,在计算机中表示为1111 1011。 这儿就有一个问题,为什么在计算机中,负数用补码表示呢?为什么不直接用原码表示?如单字节-5:1000 0101。    我想从软件上考虑,原因有两个  1、表示范围   拿单字节整数来说,无符号型,其表示范围是[0,255],总共表示了256个数据。有符号型,其表示范围是[-128,127]。   先看无符号,0表示为0000 0000,255表示为1111 1111,刚好满足了要求,可以表示256个数据。   再看有符号的,若是用原码表示,0表示为0000 000。因为咱们有符号,所以应该也有个负0(虽然它还是0):1000 0000。   那我们看看这样还能够满足我们的要求,表示256个数据么?   正数,没问题

python学习笔记之数据储存

霸气de小男生 提交于 2019-11-27 00:18:26
思考:为什么使用计算机?为了存储数据,处理数据思考:数据存到哪里?数据存在内存条思考:内存是怎么存储数据到?首先要弄清楚怎么存储数字内存:是计算机存储的介质抽象内存:一个开光,有两种状态,一种对应1,一种对应0。把8个开光放在一起,可以称这间房间为一个字节,一个开光代表一位。每个房间都有门牌号,我们把它看作为地址。把无数个房间罗列起来组成摩天大楼,可以把摩天大楼看作为内存。单位: 1bie 8bie == 1字节 1024字节 == 1K 1024k == 1M 1024M == 1G 1024G == 1T进制: 二进制 逢2进1 0 1 1 + 1 = 10 八进制 逢8进1 0 1 2 3 4 5 6 7 1 + 7 = 10 十进制 逢10进1 0 1 2 3 4 5 6 7 8 9 1 + 9 = 10 十六进制 逢16进1 0 1 2 3 4 5 6 7 8 9 a b c d e f 1 + f = 10进制转换: 十进制转二进制 公式:倒除法,余数逆序 二进制转十进制 公式:当前数字(0,1)乘以2的位数次方,再相加 八进制转二进制 公式:「一转三位」八进制的一位相当于二进制的三位 ,计算时按十进制转换,不足三位高位补0 二进制转八进制 公式:「三位一取」从低位开始,每三位得到一个八进制数字, 最后高位不足则补0 十六进制转二进制 公式:「一转四位