补码

进制转换

最后都变了- 提交于 2019-12-28 05:48:23
二进制转换成十进制 规则:从最低位开始,将每个位上的数据提取出来,乘以2的(位数-1)次方,然后求和。 例如:1011=1*2^(1-1) + 1*2^(2-1) + 0*2^(3-1) + 1*2^(4-1) = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11 按位乘权相加(权就是位数) 十六进制转换成十进制 规则:从最低位开始,将每个位上的数据提取出来,乘以16的(位数-1)次方,然后求和。 十进制转换成二进制 规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对就的二进制 。 二进制原码、反码、补码 对于有符号的而言: 1)二进制的最高位是符号位,0表示正数,1表示负数。 2)正数的原码、反码、补码都一样(三码合一)。 3)负数的反码=原码符号位不变,其它位取反(0->1,1->0)。 4)负数的补码=它的反码+1 5)0的反码、补码都是0 6)计算机运算的时候,都是以补码的方式来运算 十进制转二进制: 规则:除2取余倒排(除到商为0) 二进制转换成八进制: 规则:三位压成一位,从低位向高位压缩,不足三位补0。 000 <-> 0 001 <-> 1 010 <-> 2 011 <-> 3 100 <-> 4 101 <-> 5 110 <-> 6 111 <-> 7 例题: 八进制 二进制 363

原码,补码,反码

对着背影说爱祢 提交于 2019-12-27 13:19:24
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 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 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数,

有符号补码的加减法以及大小比较

↘锁芯ラ 提交于 2019-12-27 04:30:27
有符号补码的加减法以及大小比较 1.瞎扯简述  最近在写用fpga进行解缠绕的IP,解缠绕做的事情并不算复杂,就是比较后进行加减而已。但是解缠绕前面这个IP是用的xilinx的Cordic内核,算出来的是补码,过去只做了一些什么简单的取反加一的简单原码补码转换,所以在这里加减就懵了,没有真正碰过补码运算,正好借此机会好好整明白补码的操作。 2.原码与补码的转换  什么是有符号原码,补码怎么转换的,百度即可,耐心看5分钟就整明白了。 3.表示范围  对于8位有符号数的来讲,原码很容易理解,表示范围是-127-127。但是计算机不采用原码存储,采用补码,+0和-0的补码都是0000 0000,当时最令我疑问的1000 0000为什么表示-128,对1000 0000的符号位不变,数值位取反加一,就变成了1 0000 0000,就算我人为规定了1 0000 0000这个就是-128的补码,但是计算机怎么识别呢,毕竟这是个9位数据。   其实 ,还是自己低估了补码的意义。  我们就来看看把1000 0000作为-128的补码能不能参与运算,为了方便大家验证,我们下面不以 8位有符号数来验证,以4位有符号数验证。4位有符号数是从-8-7,1000就是-8的补码。   举个例子 ,-8+6=1000+0110=1110 1110的原码是1010=-2 正确 ,1000作为

原码、补码和反码分析

狂风中的少年 提交于 2019-12-26 22:43:27
补码是为了解决计算机的减法问题,计算的本质是取模。 来源: 计算机只有加法运算器,没有减法,所以引入符号位,例1001表示-1;     注:从硬件的角度上看,只有正数加负数才算减法。       正数与正数相加,负数与负数相加,其实都可以通过加法器直接相加。   2.引入符号位后会出现问题(因为要用负数表示减法,所以这里符号位也有参与运算)   例:     0001+1010=1011 即:1+(-2)=(-3)有问题     1001+1010=10011(溢出)=0011 即:(-1)+(-2)=3有问题     结果:因为符号位的关系,正数相加没问题,但正负数相加和负数相加有问题,   3.为解决第2步的问题,引入反码,     注:正数的反码还是原码,负数的反码为 除符号位 外,按位取反。   之后重新计算:     0001(1的反码)+1101(-2的反码)=1110(-1的反码) 即:1+(-2)=(-1)没问题     0010(2的反码)+1110(-1的反码)=10000(溢出)=0000(0的反码) 即:2+(-1)=0有问题     1110(-1的反码)+1101(-2的反码)=11011(溢出)=1011(-4的反码) 即:(-1)+(-2)=(-4)有问题   结果:正数相加没问题,但正负数相加和负数相加还是有问题,     仔细观察

Java中的强制类型转换 —— 大数转小数

社会主义新天地 提交于 2019-12-26 17:11:54
这里主要讨论一下大数转小数,比如int类型转short类型。小数转大数,如short 转 int不做讨论。 首先要明确一下转换规则: 大数转小数,多出的高位部分会被截断 。比如 int 占 4个byte(32 bit), byte占 1个byte(8bit), 那int 转 byte ,int 高位多出的那24个bit会被截断。 例1: int b = 233; // 正整数强转 System.out.println((byte)b); // 原码: 0000 0000 0000 0000 0000 0000 1110 1001 // 补码(内存):0000 0000 0000 0000 0000 0000 1110 1001 // 正数的原码、反码、补码都一样 // 截取... // 补码(截取后-内存):1110 1001 // 最高位是 1,说明是负数,因此在显示的时候还需要做转化... // 反码: 1110 1000 // 原码: 1001 0111 // 16+4+2+1 = -23 (注意符号位是 1,是负数) 例2: int b = -233; // 负整数强转 System.out.println((byte)b); // 原码: 1000 0000 0000 0000 0000 0000 1110 1001 // 因为是负数,所以符号位是 1 // 反码:

动手动脑(一)

北慕城南 提交于 2019-12-26 04:40:44
一, 代码: public class EnumTest { private enum MyEnum{ ONE, TWO, THREE } public static void main(String[] args) { for(MyEnum value:MyEnum.values()){ System.out.println(value); } } } 运行结果: ONE TWO THREE 总结如下: 1.java中的enum关键字背后实际是Enum这个类实现的。 2.values()方法遍历枚举类中的每个元素。 3.在我们编写自定义的enum时,其中是不含values方法的,在编译java文件时,java编译器会自动帮助我们生成这个方法。 二, 原码:所谓原码就是 二进制 定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。 示例: +100表示为2进制数为+1100100 原码=01100100 反码=01100100 补码=01100100 正数的话3码都一样 -100表示为2进制树为-1100100 原码=11100100 反码=10011011(第一位表示符号的数字不变) 补码=反码+1

DAY2总结

天涯浪子 提交于 2019-12-26 02:17:48
一。进制转换 1.十进制转化为其他的任意进制: 除商取余,除到商0,余数反转 2.8421码快速转化法: 8421码是中国大陆的叫法,8421码是BCD代码中最常用的一种。在这种编码方式中每一位二值代 码的1都是代表一个固定数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的 十进制数码。 3.二进制转化为八进制 十六进制: (1.)通过转化为十进制在进行转化 (2).通过8421码进行转化 4.原码 补码 反码: 了解原因:计算机底层对数据进行计算都是以"补码"进行计算的 原码 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小 反码 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码 正数的补码与其原码相同;负数的补码是在其反码的末位加1 二.变量(重点) 1.变量的概述:变量:常量是固定不变的数据,那么在程序中可以变化的量称为变量。 2.数据类型:java属于强类型语言,java中的数据类型分为两大类,1.基本数据类型,包括 整数、浮点数、字符、布尔 2.引用数据类型 基本数据类型:四类8种 占用字节数 取值范围 整数类型 字节类型 byte 1 -128~127 短整型 short 2 默认整数类型 int 4 长整型 long 8 浮点类型 单精度类型 float 4 双精度类型(默认)

1.2、java.lang(精读部分)

心已入冬 提交于 2019-12-25 19:39:19
我们都知道java.lang是java的核心包。 现在我们开始阅读lang包的一些东西。 文章目录 byte short Integer long boolean char double float byte byte类是final类。也就是说它是不可以被继承的 还有就是经典的“127和128”的问题了(图懒得换了… MAX_VALUE = 127 ) java中,byte是一个字节占八位。 127 ( 01111111 ) 127(01111111) 1 2 7 ( 0 1 1 1 1 1 1 1 ) 在加一,出现什么情况?计组原理中说过第一位是符号位(0正1负) 第一个:int+byte; 第二个:byte+byte(+=的特性)越界: 在计算机中,由于原码的表示不便,进行运算需要判断其正负极其绝对值的大小。 所以,在计算机中,通常都是采用补码形式。 正整数的补码与原码形式相同,正数的原码反码补码相同,负数的补码=反码(反码=原码的符号位不变其他位取反)+1 127 ( 01111111 ) 127(01111111) 1 2 7 ( 0 1 1 1 1 1 1 1 ) + 1 ( 00000001 ) 1(00000001) 1 ( 0 0 0 0 0 0 0 1 ) 得到 10000000 10000000 1 0 0 0 0 0 0 0 10000000 10000000

2进制

本秂侑毒 提交于 2019-12-25 01:01:20
什么是2进制 逢2进1的计数规则. 案例: 1 public class Demo01 { 2 3 public static void main(String[] args) { 4 /** 5 * 第一次 看见2进制 6 */ 7 int i = 50; //110010 8 //在println(i)输出时候,Java会使用 9 //API(方法)将2进制转换为10进制字符串 10 System.out.println(i); //"50" 11 //Java提供了方法toBinaryString可以 12 //看到内存中存储的2进制数据 13 System.out.println( 14 Integer.toBinaryString(i)); 15 for(i=0; i<=50; i++) { 16 System.out.println( 17 Integer.toBinaryString(i)); 18 } 19 20 } 21 } 计算机和2进制的关系 16进制 16进制用于简写(缩写)2进制. 因为2进制书写冗长\麻烦\易错, 因为16进制基数是2的整次幂, 所以4位2进制可以缩写为一个16进制数字. 缩写规则: 将2进制从后向前,每4位2进制数缩写为一个16进制. 案例: 1 public static void main(String[] args) { 2 /*

Java基础--基本规则、语法

柔情痞子 提交于 2019-12-23 18:17:47
一、关键字、保留字、标识符、常量、变量   1、关键字:使用某种语言赋予特殊含义的单词。   2、保留字:没有赋予特殊含义,但以后可能会使用的单词。   3、标识符:自定义的单词,以数字、字母、下划线以及$符组成,且首字母不能以数字开头,不能以关键字命名标识符。   4、常量:程序中不会变化的数据。   5、变量:用于存储数据,实质指的是内存的一段存储空间。 二、数据类型以及相关包装类   1、基本数据类型:     (1)整型:byte, short, int, long(数字后加 L 或 l)。     (2)浮点型:float(数字后加 F 或 f), double(默认为double型)。     (3)文本型(字符型):char。     (4)逻辑型(布尔型):boolean。      2、引用数据类型:数组、类、接口。   3、基本类型对应的包装类:     (1)整型:Byte, Short, Integer, Long。     (2)浮点型:Float, Double。     (3)字符型:Character。     (4)布尔型:Boolean。      4、类型的级别(低到高): byte, short, char -> int -> long -> float -> double。   5、类型转换:     低到高: 自动转换。       比如