补码

加减交替法(不恢复余数法)

…衆ロ難τιáo~ 提交于 2019-12-23 00:40:38
前言 加减交替法处理思想是先减后判,如果减余数后发现不够减,则下一步中改为加除数操作。 运算一步加减完成时,遵循的规则 当余数为正时,表示够减,即商上1,在进行下一次商时,将余数(此时为正)左移一位,减去除数。 当余数为负时,表示不够减,即商上0,在进行下一次商时,将余数(此时为正)左移一位,加上除数。 运算时需要双符号补码,所以应先把给定的定点数转换为补码形式,需要注意的是,除数的负数也要转换为双符号补码,方便后面作减法。因为在计算机中减一个数等于加这个数的负数。而补码正是用来做加减法的。 操作的步数n 是由要求的n位商决定的,如果第n步 余数为负,则需增加一步恢复余数,即 +Y ,增加的这一步不移位。 实例练习 题目: X=0.1011 Y=0.1101 用加减交替法求X/Y 解: [X]补 =0.1011 对应的双符号位补码为 00 1011 [Y]补 =0.1101 对应的双符号位补码为 00 1101 [-Y]补 =1.0011 对应的双符号位补码为 11 0011 开始计算,X先减一下Y,即X+[-Y] 我们用双符号补码来做 根据规则,结果若是负数,代表不够减,下一步应该+Y,则 商上0 ,并且在进行下一步之前让余数左移一位。即余数11 1110变为 11 1100 开始下一步 根据规则,结果若是正数,代表够减,下一步应该-Y,(-Y 就是加上-Y) 则 商上1

求int型正整数在内存中存储时1的个数 && int型的数到底最大是多少?

Deadly 提交于 2019-12-23 00:21:28
输入一个int型的正整数(十位数之内!嘞!),计算出该int型数据在内存中存储时1的个数。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int n; 6 cin>>n; 7 int count=0; 8 while(n) 9 { 10 if(n%2) count++; 11 n/=2; //n>>1; 12 } 13 cout<<count<<endl; 14 } my C++ codes are above: print(bin(int(input())).count("1"))   my Python style is up| 刚才在百度知道上看见一个网友问int型的数最大能存多少。这个问题其实计算机系统结构里有讲解, 首先,我们要知道在计算机里怎么存储数字的。在计算机里,对数字编码有3种方式:原码、补码、反码。原码其实就是10进制数直接转2进制数的结果。比如:十进制的18,在二进制里是10010。那这里的10010就是原码。我们可以sizeof一下我们自己的电脑上int型占几个字节。我的是4个字节,也就是说只有32个位。如果一个十进制数转位二进制数位数大于32,就溢出,其实也就是存不下了。 我们存数不仅仅有正数还有负数,在计算机里如何区分正数负数?我们规定最高位是符号位。为0是正

原码、反码、补码

和自甴很熟 提交于 2019-12-22 01:51:40
计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。 原码 原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。 **1. 原码的优点:**简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011 **2.原码的缺点:**原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错了。 反码 反码通常是用来由原码求补码或者由补码求原码的过渡码。 反码跟原码是正数时一样;负数时,反码就是原码符号位除外,其他位按位取反。 补码 正数的补码是其二进制表示,与原码相同 求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1 同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。 原码求补码

计算机组成原理(科学出版社) 第二章:运算方法和运算器

强颜欢笑 提交于 2019-12-21 21:05:22
复习 20190630 一、 原码、补码、反码、移码 真值(十进制数) 转换为真值(二进制数)最好补全为八位,对应的原码就是将最高位写成符号位(还是八位) 具体思维导图如下: 原码求补码的简便方法:除符号位之外,从最低位开始,遇第一个1之前的各位保持不变,其余各位按位取反 进制之间的转换,思维导图如下: 二、补码加减法 补码加法公式:[X]补 + [Y]补 = [X+Y]补 ( mod 2n+1) 定理: 任意两数补码之和等于该两数之和的补码 2. 补码的乘法和除法就是将[X]的补码向左或者右移位一次,符号位移走之后照原来的补上, 这就是算术移位。 算术移位: 由[X]补求[X/2]补 — [X]补 = 10101000 — [X/2]补 = 1 1010100 0 3. 补码的减法公式:[X — Y]补 = [X]补 — [Y]补 = [X]补 + [—Y]补 又知道,[—Y]补 等于[Y]补 取反,末位加1,所以可化为加法运算 4. 注意检测溢出,单双符号位 三、 定点运算器 1. 逻辑运算 (1). 逻辑非 逻辑非又叫求反,按位取反 (2). 逻辑加 逻辑加又叫逻辑或,常用+来表示 (3). 逻辑乘 逻辑乘又叫逻辑与,常用 。来表示 (4). 逻辑异 对两数进行逻辑异就是按位求他们的模2和,所以逻辑异又称为按位加,常用记号 来表示 2. 多功能算术/逻辑运算单元ALU (1)

数据类型存储的基础知识

断了今生、忘了曾经 提交于 2019-12-21 16:34:11
整型的存取 在计算机中最高位为符号位,0表示正数,1表示负数。在计算机中数据是使用其补码表示的,但正数补码是其本身,负数的补码是负数的源码取反加一得到的补码。 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 在java中的整数类型有四种,分别是byte short in long,byte只是一个字节0或1。 其他的三种类型如下: 1、 基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 (-2的15此方) 最大值:Short.MAX_VALUE=32767 (2的15次方-1) 2、 基本类型:int 二进制位数:32 包装类:java.lang.Integer 最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方) 最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1) 3、 基本类型:long 二进制位数:64 包装类:java.lang.Long 最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方) 最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1) 机器数

Java基础-数据类型和包装类

 ̄綄美尐妖づ 提交于 2019-12-21 07:03:50
数据类型 分为基本数据类型和引用数据类型 基本数据类型变量存储的就是数据本身,引用数据类型的变量是保存数据的空间地址 四种基本数据类型: 逻辑型 boolean 文本型 char 整数型 byte short int long 浮点数型 float double 取值范围: 最高位为符号位为0为正 1为负 计算机存储的是补码 正数的补码为原码 负数的补码为原码的反码+1 反码和补码计算数值也需要转换成原码 byte: byte 数据类型是8位、有符号的,以二进制补码表示的整数; 最小值是 -128(-2^7); 最大值是 127(2^7-1); 默认值是 0; byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一; 例子:byte a = 100,byte b = -50。 short: short 数据类型是 16 位、有符号的以二进制补码表示的整数 最小值是 -32768(-2^15); 最大值是 32767(2^15 - 1); Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一; 默认值是 0; 例子:short s = 1000,short r = -20000。 int: int 数据类型是32位、有符号的以二进制补码表示的整数; 最小值是 -2,147

计算机组成原理

浪尽此生 提交于 2019-12-21 05:35:36
I:原码,补码和反码 1. 在计算机系统中,数值一律用 补码 来存储 使用补码,可以将符号位和其他位统一处理;同时减法也可按加法处理。 两个用补码表示的数相加是,如果最高位(符号位)有进位,则进位被抛弃。 2.正数的补码和原码相同 3.负数的补码:符号位为1,其余位为原码按位取反,然后整个数+1 4.已知补码求原码: 负数:(符号位)为1,其余各位取反,然后整个数+1 5.模:   一个计量系统的计数范围,时钟的计量范围是0~11,模=12   模实质上说计量器产生“溢出”的量,它的值在计量器表示不出来,计量器上只能给你表示出模的余数。 任何有模的计量器,均可减法为加法运算。 例如当前时间是6点,但时钟指向10点,那么可以倒拨4的小时 10 - 4 = 6;也可以顺拨8个小时 (10 +8)%12 = 6 ,对于模而言,8和4互为补数,两者相加等于模。 Int32 a = -1 使用Convert.ToString()方法转换为字符串时,会转换成一个32位长度的字符串 11111111111111111111111111111111 对这里还是不明白。首位为1(负号)后面取反?写个小东西验证一下。 namespace SchedulerEngine{ public partial class MainPage : UserControl { public MainPage() {

源码、反码、补码

前提是你 提交于 2019-12-20 19:43:39
1.有符号正数的原码,反码,补码相同 2.负数原码与补码的转换 (1) 传统方法 1) 取负数绝对值 2) 绝对值二进制按位取反 3) 取反后加一(取补码的步骤是将其绝对值按位取反再加1即可) (2) 通用方法 变量A用N位来存储,当其为负数时计算其补码的方法是A=A+2^N; (3) 以下是原码和补码互换的(负数): 从数的右边往左开始数,遇到“0”不理它,直到遇到第一个“1”为止,以后的每一位数取反即是它的原码或补码,符号位不变,还是“1”(补码的补码是原码)。 来源: CSDN 作者: 雨亼 链接: https://blog.csdn.net/u013676868/article/details/103633096

原码、反码、补码知识详细讲解(此作者是我找到的讲的最细最明白的一个)

筅森魡賤 提交于 2019-12-17 10:24:20
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数。 2、真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数,

JAVA基础——数据类型

被刻印的时光 ゝ 提交于 2019-12-17 00:16:48
基本数据类型和引用数据类型 温故而知新,可以为师矣! 基本数据类型 八大基本数据类型: 1.byte 8位、有符号的以二进制补码表示的整数 min : -128(-2^7) max: 127(2^7-1) default: 0 对应包装类:Byte 2.short 16位、有符号的以二进制补码表示的整数 min : -32768(-2^15) max: 32767(2^15 - 1) default: 0 对应包装类:Short 3.int 32位、有符号的以二进制补码表示的整数 min : -2,147,483,648(-2^31) max: 2,147,483,647(2^31 - 1) default: 0 对应包装类:Integer 4.long 64位、有符号的以二进制补码表示的整数 min : -9,223,372,036,854,775,808(-2^63) max: 9,223,372,036,854,775,807(2^63 -1) default: 0 对应的包装类:Long 5.float 单精度、32位、符合IEEE 754标准的浮点数 float 在储存大型浮点数组的时候可节省内存空间 浮点数不能用来表示精确的值,如货币 default: 0.0f 对应的包装类:Float 6.double 双精度、64位、符合IEEE 754标准的浮点数