补码

反码、原码、补码及位运算

家住魔仙堡 提交于 2019-12-05 14:00:13
JAVA的基本数据类型及其取值范围 类型 存储需求 bit 数 取值范围 备注 int 4字节 4*8 -2147483648~2147483647 即 (-2)的31次方 ~ (2的31次方) - 1 short 2字节 2*8 -32768~32767 即 (-2)的15次方 ~ (2的15次方) - 1 long 8字节 8*8 即 (-2)的63次方 ~ (2的63次方) - 1 byte 1字节 1*8 -128~127 即 (-2)的7次方 ~ (2的7次方) - 1 float 4字节 4*8 float 类型的数值有一个后缀 F(例如:3.14F) double 8字节 8*8 没有后缀 F 的浮点数值(例如:3.14)默认为 double boolean 1字节 1*8 true、false char 2字节 2*8 Java中,只要是字符,不管是数字还是英文还是汉字,都占两个字节。 反码、原码、补码 在计算机系统中,数字一律用补码来表示、运算和存储。 原码 :最高位为符号位的二进制数。 反码 :正数的反码是其本身,负数的反码在其原码的基础上,符号位不变,其余各个位取反。 补码 :正数的补码是其本身,负数的补码在其原码的基础上,符号位不变,其余各位取反,最后+1。 由来 : 本来的二进制数是没有正负的,为了区分正负数,将二进制的最高位用来表示正负(0表示正

06 负数在二进制中的表示方法

…衆ロ難τιáo~ 提交于 2019-12-05 06:53:05
在二进制中,第一位为1的表示负数,为0表示整数。 负数在二进制为补码; 错误表示示范 -3 : 1000 0011 错误! 正确表示示范 -3 : 1111 1101 来源过程: 3 的原码 :0000 0011 原码取反:1111 1100 补码:1111 1101 补码就代表负数。 来源: https://www.cnblogs.com/scopicat/p/11911747.html

数据的表示与运算-浮点数

醉酒当歌 提交于 2019-12-05 05:29:05
数据的表示与运算-浮点数 前言: 计算机中,数字分为定点数和浮点数。相对于浮点数,定点数比较好理解,原码补码反码移码。而浮点数十分繁杂。 关于浮点数的繁杂,我觉得最好的解释就是, \(William\ M. Kahan\) 因其在浮点数运算标准的制定上的突出贡献而获得图灵奖。 \(Kahan\) 也是浮点数 \(IEEE754\) 标准的主要设计师。 初识浮点数: 假如说我们现在想要表示光速这样一个数值,我们可以怎么做? \(1:\) 采用整数方式把他写出来,那么就是 \(300...00m/s\) 。这样数字十分的长,与计算机不好保存。 \(2:\) 采用科学计数法,那么就是 \(3*10^{8}m/s\) ,那么如果我现在想保存这个数字,那么我只需要记录三个信息,第一个是 \(3\) ,第二个是 \(10\) ,第三个是 \(8\) 。 两种方法比较: 很明显第一种方法需要我们用更多的存储空间来保存它,而对于科学计数法,我们并不需要记录那么多的数却能表示同样的数值。 对于计算机而言,只能认识 \(0/1\) 符号,这在硬件实现上更为方便简单。所以我们这时候可以把 \(10\) 这个底数给取消掉,计算机默认他是 \(2\) ,这样我们就可以只用保存两个数字,来表示这样一个大的数字。 对于表示电子的质量,太阳系的直径,这样非常极端的数字时,科学计数法的优势显得更为明显。它更方便。

《深入理解计算机系统(第三版)》第二章学习总结

六月ゝ 毕业季﹏ 提交于 2019-12-05 05:18:01
第二章 信息的表示和处理 2.1 信息存储 字节(byte):8位的块,作为最小的可寻址的存储器单位,不是访问存储器中单独的位。 计算机字长:指明指针数据的标称大小。32位机器虚拟地址空间为4GB。64位为16EB。64位机器可以运行32位机器编译的程序,反过来不行。 字节顺序 小端法:最低有效字节在最前面; 大端法:最高有效字节在最前面; 大小端引起的字节顺序问题: 在不同类型的机器之间通过网络传输二进制数据(用协议解决)。 在阅读表示整数数据的字节序列时。 编写规避正常的类型系统的程序时。 字符串表示:字符串被编码为一个以null(‘\0’)字符结尾的字符数组。每个字符用某个标准编码来表示,常见的为ASCII字符码。代码表示:不同机器的指令编码是不同的,一般二进制代码是不兼容的。 布尔运算:~非,&与,|或,^异或,位运算。 逻辑运算:逻辑运算认为所有非0参数表示TRUE,0表示FALSE。对应OR(||)、AND(&&)和NOT(!)。 移位运算:左移,x<<k,丢弃最高的k位,右端补k个零。右移分为逻辑右移和算术右移。逻辑右移在左端补0,算术右移在左端补最高位。 2.2 整数表示 无符号整数直接用其二进制数值表示。 有符号整数用二进制补码表示,最高位为符号位,1表示负数,0为非负。补码的范围是不对称的,|Tmin|=|Tmax|+1,C语言中文件<limits.h

二进制补码(负数编码)、反码、原码

寵の児 提交于 2019-12-05 02:55:12
一、补码 补码是对负整数在计算机中存储的一种形式; 第二种形式的负数在计算机中可以使用 (负号加数字)的形式表示一个负数;例如(-3 以1000 0011 存储)但是使用这种方法表示的只有(+0,-0),而且不可以做算术运算。 二、计算机数和真值 讨论二进制编码之前,首先来了解一下什么是计算机数和真值 (一)计算机数 一个数在计算机中的二进制表示形式,叫做这个数的机器数 。 机器数数带符号的,由于计算机内部的硬件只能表示两种物理状态,在 计算机使用一个数的最高位存放符号,正数为 0,负数为 1。 例如: 十进制中的 +5 和 -5,计算机字长为8位,分别转换为 00000101 和 10000101;这里面的 00000101 和 10000101 就是机器数 机器数的特点: 一个数值的二进制表现形式,就叫做这个数的机器数。二进制的位数是受机器设备的限制的。机器内部设备一次能表示的二进制位数叫做机器的字长,一台机器的字长数固定的。 字长8位的叫做一个字节(Byte),机器字长一般都是字节的整数倍,如字长 8位、16位、32位、64位。 机器数的分类: 根据小数点位置固定与否,机器数又可以分为定点数和浮点数。通常使用 定点数表示 整数,使用 浮点数表示 实数: 1、整数 :整数没有小数部分,小数点固定在数的最右边。整数可以分为(1) 无符号整数 和 (2) 有符号整数 两类。

学习《深入理解计算机系统(第三版)》第二章总结

放肆的年华 提交于 2019-12-05 02:03:31
学习《深入理解计算机系统(第三版)》第二章总结 三种重要的数字表示 无符号编码:基于传统的二进制表示法,表示大于或等于0的数字。 浮点数编码:表示有符号整数的最常见的方式,可为正或负 浮点数编码:表示实数的科学记数法的以2为基数的版本 排列表示一个对象的字节的规则 小端法(little endian):某些机器选择在内存中按照从最低有效字节到最高有效字节的顺序存储对象,最低有效字节在最前面的方式成为小端法。 大端法big endian):一些机器则按照从最高有效字节到最低有效 字节的顺序存储,最高有效字节在最前面的方式成为大端法。 双端法(bi-endian):可以把它们配置成作为大端或者小端的机器运行。然而,实际情况是:一旦选择了特定操作系统,那么字节顺序也就固定下来。 有符号数和无符号数之间的转换 C语言允许在各种不同的数字数据类型之间做强制转换。 强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。 执行一个运算的时候,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式的将有符号数强制类型转换为无符号数,并假设两个数都是非负的,来执行运算。 整数运算: ①无符号数的加法: 重要结论:模数加法形成了阿贝尔群,可交换结合,每个元素都有一个加法逆元。 ②补码加法; ③补码的非; ④无符号乘法; ⑤补码乘法: 重要结论:设为二进制表示的无符号整数,对于任意k0

原码、反码、补码和位运算

江枫思渺然 提交于 2019-12-04 20:12:59
参考: https://www.zhihu.com/question/20159860 https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 总结一些要点 为了使计算机运算数据更加简单,减法转换为加法: 1 - 1 => 1 + (-1)。为了支持这个功能,计算机对数据的存储需要一些额外的处理。 原码:最高位作为符号位,也就是对于1和-1的区别,只是最高位不一样。 反码:正数的反码和原码是一致的,而负数,除了最高位是1,其余位取反。 补码:正数的补码和原码是一致的,而负数的补码是负数的反码+1,+1之后可能会触发进位,导致最高位由1变成0,这种情况下所有位都是0了,也就是数字的值为0,因为0没有正负之分,所以可以认为补码表示法中,计算机认为最高位是1的都是负数,其余都是正数或者0 计算机采用补码的编码方式来存储数字 ,如以4位的数字长度表示 3 + (-3): 3的补码 = 3的原码 = 0011 -3的补码 = -3的反码(1100) + 1 = 1101 0011 + 1101 = 10000,因为这里数字位为4,超出的被丢弃掉,所以运算结果是0000 = 0 根据补码的规律,计算出实际的数值,如 1010 0000 0000 0000 0000 0000 0000 0000 -1之后

汇编基础知识

帅比萌擦擦* 提交于 2019-12-04 11:26:14
1: 数据的表示 微型计算机的字长与微处理器的寄存器位数有关。 以 Intel 80X86 系列微处理器为例,CPU 是 8086/8088、80286 的字长是 16 位(二进制位 bit),那么它们的寄存器的位数一定是 16 位的; 32 位字长的微机 CPU 是 80386/80486 或者 Pentium 系列,它们的寄存器的位数则是 32 位的。 学习汇编语言我们会用到十六进制(H)的数据形式,要使自己尽快习惯用十六进制来思维。在汇编语言中,数值后面分别用字母 B 、 H 、 D 代表二进制(Binary)、十六进制(Hexadecimal)、十进制数(Decimal)(十进制数可以省略 D )。 在计算机中还规定采用字节、字、双字等单位来表示数据。 字节(Byte):8 位二进制数。如 00000101B 或表示成 05H ; 10000101B 或表示成 85H 。 字(Word):16 位二进制数,等于 2 字节。如 1100010111010110B 或表示成 C5D6H 。 双字(Double Word):32 位二进制数,又称为双精度数,等于 4 字节。如 23456789H 。 2: 寄存器的分类 8086 寄存器都是 16 位的寄存器,根据用途可分为 4 种类型。分别是数据寄存器、地址寄存器、段寄存器和控制寄存器 (1)数据寄存器

3.关于无符号类型和char的一些必懂知识

自古美人都是妖i 提交于 2019-12-04 09:05:18
3.1. 输出一个用负数赋值的无符号类型声明的变量或者输出一个两个无符号类型声明的变量相减的结果的结果是什么? 1 unsigned int num=1; 2 unsigned int num1 = 2; 3 std::cout << num - num1; 这里的结果应当是(-10)mod (int类型的最大值加1)得到的结果,mod 运算的结果符号看右边的值,显然是正数的结果,32位机器的int是最大值4294967295,所以最后的结果是4294967295。不是应该是10吗?如何从计算机存储的角度看待这个结果呢?数值在计算机中的的存储是用原码,反码和补码的来解决的,而且只保留了加法运算,补码解决了原码正负相加结果不符实际和反码无法区分正负0的弊端,这里不再赘述,具体看转的文章中有。-1的二进制补码是1111 1111 1111 1111...1111将它转换为无符号数后,恰好为4294967295,原码和补码具有一致性,于是就有了上述的结果。 3.2.char 中的字符集是怎么回事?如何将字符的0~9转换成int? (1)字符集是用八进制或者十六进制数字对可打印和不可打印的字符进行编码使之一一对应,在C++中可以使用转义序列'\'进行对应的输出。 (2)因为0~9对应的字符集中是连续的,只需要拿该字符减去‘0’即可得到对应的int数字 来源: https://www