补码

C++绪论

纵然是瞬间 提交于 2019-11-29 16:33:50
(服务器也不用来干什么,就维持着个博客,感觉浪费,所以迁移过来了) 知识点部分 软件 包括了使计算机运行所需的各种 程序 和相关的 文档资料 。 程序是指令的集和,而指令就是计算机可以识别的命令。 指令系统:一台计算机所能识别的所有指令的集合。 机器语言:计算机硬件系统可以识别的二进制指令组成的语言。 汇编语言:机器指令映射为一些可以被人读懂的助记符(ADD,SUB)。 汇编程序将汇编语言转换为机器语言。 高级语言:屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义得到数据命名和容易理解的执行语句。 面向对象:将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征)形成类。 优点:(1)代码重用(2)缩短软件开发周期(3)使得软件风格统一 结构化程序设计与面向对象的方法对比 结构化:自顶向下,逐步求精,其程序结构是按功能划分为若干个基本模块,模块直接形成树状结构,模块之间的关系尽可能简单,功能上独立,每个模块内部均是由顺序,选择,循环三种结构组成的,模块化的实现方法就是使用子程序。缺点:数据和数据处理过程分割为相互独立的实体,数据结构发生改变时,相关处理过程也要发生改变。 面向对象的方法:将数据和对数据的操作方法放在一起,作为一个相互依存,不可分割的整体—对象。对同类型对象抽象出其共性,形成类,类中的大多数数据

java 类型转换的原理

[亡魂溺海] 提交于 2019-11-29 16:00:52
最近在看JDK的源码,在看源码的时候看到了0xff这么个东东,从这里引出了类型转换。因此在此记录下。 在写原理之前先看几个例子。byte b=-1;int a=b;然后打印a得出的结果是-1.int b=-1;byte a=(byte)b;打印a得出来的是-1。int a=255;byte b=(byte)255;打印b得出的结果也是-1;而把这个强制转出来的-1再转回int,得出的确不是255了,有点奇怪了。这是为什么那?好了,废话不过说,下面就开始讨论为什么了。在讲这个之前先来几个概念。二进制中的原码,反码,补码,补位,真值。再有就是byte类型和int类型分别占了多少位。这里需要说一下,二进制的高位是符号位,1表示负数,0表示正数。注:java是用补码存储数据的。 byte类型占一个字节,一个字节由8位二进制组成,所以说byte类型占了8位。int类型占4个字节,所以说int类型占了8位。 真值:这个就看字面意思,int a=-1;a的真值就是-1. 原码:int类型的-1的二进制表示,由于-1是负数,又是int类型的,所以他需要32个二进制来表示,二进制的最高位是符号位,所以为1,1的二进制为1,所以-1的二进制表示为 1000 0000 0000 0000 0000 0000 0000 0001; 反码:正数的反码就是原码,负数的反码是在原码的基础上,符号位不变

关于计算机中的《补码》,公式:-n=~n+1 引伸:~n=-n-1

孤街浪徒 提交于 2019-11-29 16:00:37
在计算机系统中,数值一律用补码来表示(存储)。主要原因是使用补码可以将符号位和其他位统一处理;同时,减法也可以按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。补码跟源码的转换过程几乎是相同的。 补码概述   求给定数值的补码表示分以下两种情况: ⑴正数的补码   与 原码 相同。   【例1】+9的补码是00001001。(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。) ⑵负数的补码   负数的补码是对其原码逐位取反,但符号位除外;然后整个数加1。   同一个数字在不同的补码表示形式里头,是不同的。比方说-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认把一个数转换成8位2进制的补码形式,每一种补码表示形式都只能表示有限的数字。   【例2】求-7的补码。   因为给定数是负数,则符号位为“1”。   后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001)   所以-7的补码是11111001。   已知一个数的补码,求原码的操作分两种情况:   ⑴如果补码的符号位为“0”

原码、补码和反码

萝らか妹 提交于 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

Python的二进制位运算

时光怂恿深爱的人放手 提交于 2019-11-29 15:13:45
Python语言能够对整数进行逐位操作,它支持的运算符及含义如下所示: &:按位与 |:按位或 ^:按位异或 ~:取反 <<:左移 >>:右移 对于整型数据,各种位操作是对该数据的补码进行的(正数的补码与原码相同,下面举例皆以正数为例);对于长整型数据,由于其位宽不定,所以进行位运算时,认为其补码的符号位向外无限扩展。下面对各运算符进行举例说明: (1)首先看取反 >>> ~1 -2 >>> ~0x0001 -2 >>> 正整数1,int型是32位的,就是00000000 00000000 00000000 00000001 求反变为11111111 11111111 11111111 11111110,这正好是-2的补码。同样十六进制的0x0001结果是一样的。 (2)按位与 >>> 1&2 0 >>> 1&3 1 >>> 对于按位与,就是对参加运算的两个整数的补码逐位进行逻辑与运算,即参加运算的两个运算量,如果两个相应位都为1,则该位的结果为1,否则为0。 (2)按位或 >>> 1|1 1 >>> 1|2 3 >>> 对于按位或,就是对参加运算的两个数字的补码逐位进行逻辑或运算,即参加运算的两个运算量,只要两个相应位中有一个为1,那么该位的结果为1;只有两个相应位都为0时,该位的结果才为0。 (3)按位异或 >>> 1^1 0 >>> 1^2 3 >>> 对于按位异或

数值数据在计算机中的存储

蓝咒 提交于 2019-11-29 14:41:35
参考: MOOC-袁春风:计算机系统基础(一) 第二周 定点数与浮点数 整数、浮点数在计算机中的存储 一般数值数据包括 整数 和 实数 。数值数据在计算机中表示主要关心三个方面:进位计数制、定/浮点表示、二进制编码。 进位计数制: 十进制:0, 1, 2, 3, 4, 5, 6, 7, 8, 9 二进制:0, 1 八进制:0, 1, 2, 3, 4, 5, 6, 7 十六进制:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 进制转换(R进制):整数部分,除R取余,上右下左;小数部分,乘R取整,上左下右。 简便方法: 835=512+256+64+2+1=>1101000011 0.6875=0.5+0.125+0.0625=>0.1011(小数点在计算机中如何表示) 定、浮点表示(解决 小数点 问题) 定点数 :约定机器中所有数据的小数点位置固定不变,通常将定点数表示成纯小数(小数点固定在数值部分的最高位之前)或纯整数(小数点固定在数值部分的最后面)。 定点小数 用来表示浮点数的尾数部分; 定点整数 用来表示整数。整数又分为 带符号整数 和 无符号整数 。有无符号位决定了数值的表示范围。 浮点数 :利用指数达到浮动小数点的效果,将实数X表示为 \(X=(-1)^s \times M \times R^E\) 。S取0或1,决定X的 符号

java中位运算和移位运算详解

拟墨画扇 提交于 2019-11-29 10:11:50
一、位运算 (1)按 位 与 & 如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0。首先我们看一下对正数的运算 分别看一下正数和负数的具体运算步骤 正数直接取二进制运算,负数取反加一得补码再运算,得到的结果符号位为0,不需要做任何操 作直接给出结果,后面会讲到如果结果为负数的情况 (2)按位或 | 有1为1,否则为0 分别看一下正数和负数的具体运算步骤 讲一下负数求反和补码的直接给结果,当运算结果符号位是1为负数,那就需要进行减1操作,再按位取反,这个时候得到的才是正确的结果 (3)异或 ^ 相同为0,不同为1 二、移位运算 (1)左 移 (<< ) 右边空出的位用0填补高位左移溢出则舍弃该高位。计算机中常用补码表示数据,注,用补码计算 (2)右 移 (>> ) 左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;低位右移溢出则舍弃该位。 (3)无 符 号 右 移 (>>> ) 无符号右移:正数与右移规则一样,负数的无符号右移,就是相应的补码移位所得,在高位补0即可 原文地址:https://www.cnblogs.com/xiuyu/p/8428963.html 一、位运算 (1)按 位 与 & 如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0。首先我们看一下对正数的运算

Java基础(一)

旧街凉风 提交于 2019-11-29 09:45:10
常识 Java是由Sun公司的James Gosling和同事们共同研发,并在1995年正是推出。并于2019年3月20日,JavaSE 12发布。 Java分为三个体系JavaSE,JavaEE和JavaME。 Java的特性:简单的、面向对象的、分布式的、健壮的、安全的、体系结构中立的、可移植的、解释型的、高性能的、多线程的以及动态的。 Windows系统安装Java 1、下载jdk 2、配置环境变量:JAVA_HOME、Patth、CLASSPATH 3、测试:java -version、java、javac java源程序写入文本文件中,文件名后缀为.Java,文件名与源代码的类名一致。 然后在命令窗口中切换到保存文件的路径下,javac 文件名.java,该命令调动jdk在当前目录下生成文件名.class文件; 然后java 文件名,该命令会由jdk运行指定的class文件。 注意: 所有的Java程序由public static void main(String[] args)方法开始执行。 Java标识符与命名规则 Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。 所有的标识符都应该以字母(A-Z或者a-z)、美元符号($)、下划线(_)开始,在之后的字符还可以是数字。 关键字不能用作标识符 Java是大小写敏感的 类名:对于所有类来说

unsigned int 和 int

最后都变了- 提交于 2019-11-29 09:22:02
就如同int a;一样,int 也能被其它的修饰符修饰。除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种: 1.signed----有符号,可修饰char、int。Int是默认有符号的。 2.unsigned-----无符号,修饰int 、char 3.long------长型,修饰int 、double 4.short------短型,修饰int 我们主要来看一下signed和unsigned与int之间的联系与区别。 什么叫做有符号,什么叫做无符号 这个问题其实很简单,比如:5和-5,5没有符号,-5有符号。简单吧。但是在计算机中的这种符号可不简单。我们分别来看一下: 在说明有符号和无符号的区别之前,我们必须先知道溢出是怎么回事,因为有无符号的根本原因可以说就是因为数据出现了溢出现象导致的。 溢出: 我们知道数据在计算机中以二进制存储,并且占据一定的空间,而这个空间属于计算机分配的空间。 计算机给int分配32位或者16位(不同电脑可能不同)的空间,既然空间有限,那么数值就会有限制,就会存在最大值与最小值这一说,比如:假设int类型的分配16位,无符号类型的最大值为1111 1111 1111 1111(16个1),也就是65535,如果超过了65535,这就叫做溢出,那该怎么办? 如果要输出65536,那将会输出个什么东西呢?

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

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