原码

原码、反码、补码

匿名 (未验证) 提交于 2019-12-02 23:38:02
注意,我们这里举列的原码和反码只是为了求负数的补码,在计算机中没有原码,反码的存在,只有补码。 一.原码 正数的原码就是它的本身 假设使用一个字节存储整数,整数10的原码是:0000 1010 负数用最高位是1表示负数 假设使用一个字节存储整数,整数-10的原码是:1000 1010 二.反码 正数的反码跟原码一样 假设使用一个字节存储整数,整数10的反码是:0000 1010 负数的反码是负数的原码按位取反(0变1,1变0),符号位不变 假设使用一个字节存储整数,整数-10的反码是:1111 0101 三.补码(再次强调,整数的补码才是在计算机中的存储形式。) 正数的补码和原码一样 假设使用一个字节存储整数,整数10的补码是:0000 1010(第三次强调:这一串是10这个整数在计算机中存储形式) 负数的补码是负数的反码加1 假设使用一个字节存储整数,整数-10的补码是:1111 0110(第三次强调:这一串是-10这个整数在计算机中存储形式) 四.在计算机中,为什么不用原码和反码,而是用补码呢? 因为在使用原码,反码在计算时不准确,使用补码计算时才准确。 使用原码计算10-10 0000 1010  (10的原码) +1000 1010   (-10的原码) 1001 0100  (结果为:-20,很显然按照原码计算答案是否定的。) 使用反码计算10-10 0000 1010 

原码、反码和补码的小知识

匿名 (未验证) 提交于 2019-12-02 23:03:14
原码、反码和补码 反码:正数的反码与原码相同,负数的反码符号位不变,其余按位取反 补码:正数的补码与原码相同,负数的反码符号位不变,其余按位取反+1 负数在计算机用补码存储,而正数,原码补码都一样(正数负数在计算机中都是用补码来描述的) 举个例子: 5-1=5+(-1) 直觉上 0b101 - 0b1 = 0b100 =4,其实在计算机中是0b101+0b1111 1111,溢出位舍弃 具体过程: 于是 5+(-1)即: 1 0 1 1 1 那么12的取反~12是多少呢? 取反+1即: 1000 1100+1=1000 1101= -13 文章来源: 原码、反码和补码的小知识

剑指offer|解析和答案(C++/Python) (六)

匿名 (未验证) 提交于 2019-12-02 22:51:30
剑指offer|解析和答案(C++/Python) (六) 参考剑指offer(第二版),这里做一个学习汇总,包括解析及代码。代码均在牛客网进行验证(摘自自己的牛客网笔记)。 习题 两个面试案例 1.把字符串转换成数组 (牛客网上部分题是剑指offer的思考题,不多,下面就是那些剩下的题) 2.变态跳台阶 3.矩形覆盖 1.把字符串转换成数组 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 示例1 输入: +2147483647 1a33 输出: 2147483647 0 思路: 这题本身不难,不够需要注意许多细节。 特殊用例的测试: 1.空指针 2.空字符串"" 3.正负号 4. 溢出 这里着重讲一下正负数溢出。 参考: https://zhidao.baidu.com/question/194668811.html https://zhidao.baidu.com/question/2052829228594311827.html A.负数溢出 这里对应的测数数据为" -2147483649 ",正确的输出为: 0 ,但很有可能造成错误输出: 2147483647 。这因为32位的int数据范围是 -2147483648 ―― 2147483647

计算机科学基础知识

。_饼干妹妹 提交于 2019-12-02 21:59:21
1. 计算机科学基础知识   1.1 数制及其转换     二进制、八进制、十进制和十六进制等常用数制及其相互转换   1.2 计算机内数据的表示     数的表示(原码、反码、补码、移码表示,整数和实数的表示,精度和溢出)      原码表示法 :最高位是符号位。数值X的原码记为[X] 原 ,如果机器字长为n(即采用n个二进制位表示数据),则原码表示:     [+0] 原 =0 0000000  [-0] 原 =1 0000000     [+1] 原 =0 0000001  [-1] 原 =1 0000001     [+127] 原 =0 1111111  [-127] 原 =1 1111111     [+0.5] 原 =0 .1000000  [-0.5] 原 =1 .1000000      反码表示法 :数值X的反码记为[X] 反 ,如果机器字长为n,则原码表示:正数的反码表示同原码,负数的反码表示将正数原码表示中的01反过来。      补码表示法 :负数的补码表示将正数原码表示中的01反过来再+1。0有唯一补码,全为0。     [+0.5] 补 =0 .1000000  [-0.5] 补 =1 .1000000     [+1] 补 =0 0000001  [-1] 补 =1 1111111      在 计算机系统中常采用补码来表示和运算数据

大数据学习笔记――Java篇

匿名 (未验证) 提交于 2019-12-02 21:52:03
Java / 计算机基础知识整理 在进行知识梳理同时也是个人的第一篇技术博客之前,首先祝贺一下,经历了一年左右的学习,从完完全全的计算机小白,现在终于可以做一些产出了!可以说也是颇为感慨,个人认为,学习本身就应该是有方法论的,前人总结了不少比较好的学习方法(比如说费曼学习法,金字塔原理),我们在进行好方法借鉴的同时,也不要忘了让整个学习过程形成一个闭环,我认为,向他人教学,或是定期将已有的知识进行一些梳理,总结,就是闭环的一种,这种方式在向他人传授知识的同时,更是对自己已有知识体系的一次查漏补缺。好了,废话不多说了,开始我们的行程了吧,第一次以这种方式进行分享,势必还有很多不够完善之处,我自己也会坚持博客的撰写,希望能够越写越好,技术进步的同时,也锻炼自己的文笔!(仪式感还是需要滴) 实际上,对于大数据技术本人已有一些应用场景了,特此开了自己的博客,将以往的知识点进行梳理: 1. Java发展历史及其语言概述 1946年2月,美国数学家冯 诺伊曼研发出了世界上第一台计算机,ENIAC,而这也标志着人类科技发展史上的一座伟大里程碑。不同于自然语言,计算机并听不懂人类所说的话,因此,计算机语言诞生了,计算机语言的发展史经历了机器码到汇编语言再到高级语言三个阶段,第一代的机器码完全就是01代码,而汇编语言则出现了一些简单的英文单词,第三代的高级语言更接近于人类语言,因此容易理解、记忆

原码、反码、补码原理

旧街凉风 提交于 2019-12-02 18:53:10
  最近看一些编程的底层内容,一般对于原码、反码、补码的解释如下:     原码、反码、补码是计算机中对数字的二进制表示方法。     原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。     反码:如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。     补码:如果是整数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。   好了,就是这么简单,懂一点二进制的童鞋按照这个正逆推算,木有问题。但是真的就这么简单吗?肯定不是了,楼主对于原码、反码、补码一直很疑惑:正数的补码等于他的原码, 负数的补码等于反码加一。科学家是不是太草率了点,计算机原理就是这么正反加减搞出来的?楼主查了一些资料、文章,总算弄明白了其中的原委。这里有一篇文章, 从原码讲起,通过简述原码,反码和补码存在的作用,加深对补码的认识。   附上原创地址,原作者保留权利   https://www.imooc.com/article/16813?block_id=tuijian_wz   接触过计算机或电子信息相关课程的同学,应该都或多或少看过补码这哥仨。每次都是在课本的最前几页,来上这么一段: 什么反码是原码除符号位,按位取反。补码等于反码加一。 然后给整得莫名其妙

数值型数据的表示(2.0)

寵の児 提交于 2019-12-02 09:14:47
无符号数 计算机CPU中寄存器是用来存放数据的,通常称寄存器的位数为CPU的机器字长。所谓无符号数,就是没有符号的数(只能表示正数),在寄存器中的每一位均可用来存放数值,而与其相对的另一个概念——有符号数要复杂一些。因为有符号数还能表示负数,这就需要有一个数据位来表示数据的正负,所以无符号数是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值。由于无符号数和有符号数的这一区别,在同一机器字长的条件下,无符号数与有符号数所能表示的数值范围也是不同的。例如,机器字长同为16位的情况下,无符号数的取值范围为0~65535,而有符号数如果采用补码表示法(关于补码下面会学到),取值范围则为:-32768~+32767. 有符号数 1.真值与机器数的概念 学习有符号数首先要理解两个专业术语:真值和机器数。 我们平时使用符号“-”来表示一个负数,例如-100,-32,使用“+”或省略“+”来表示一个正数,例如+65,130.这些例子中的实际值就是真值。真值往往是面向人的,可以用二进制数表示,也可以用其它数值表示,但根据习惯,常用十进制数表示。 而在计算机中,因为只能表示0和1两种数码,所以计算机中任何信息都是采用0和1的组合序列来表示。也就是说,对于有符号数来说,也只能用0或者1来表示“正”或“负”。一般情况下,都用0来表示“正”,用1来表示“负”

20119.10.25

空扰寡人 提交于 2019-12-02 08:58:47
如果想让计算机I业就得先把程序编出来,然后通过输入设备送到存储器保存起来即程序存储下面就是编程程序的问题根据冯曼的问题根据冯诺依曼的设计计算机应能动执行程序页执行程序又旧为逐条执行指令执行条令又可分为人一4基本操作 1取出指令从存储某个地址中取出要执行的指令送到CPU内部的指令寄存器暂存 (2)分析指令把保存在指令译码向各个部件发出相应控制信号 (4)为执行下一条指令作好准备即取出下指令 1原码是符号加上值 正数的反码是其本身 负数的补码是在其原码的基础上 负数的反码是在其原码的基础上符号不变取各个取反 符号不变取最后即在石开的基础上加1 正数的补码就是其本身 固态硬盘原理是一种主要以闪存CNAN卩丨αsn7作为永久性存储器的计算机存储设备处固态主要动磁头转动实现读写操作的磁盘而言NAM或者其他固态存储以电位高低或者相位状态的不同记录和人是人们为了将符号位参与运算并组保留加法从而简化计算机运算发明了原码反码和补码保码反码补码都是有符号的用二进制表示数的方法均由符号位和数值后成来来看你码 来源: https://www.cnblogs.com/zhukefei/p/11739514.html

为什么byte的最大是2的7次方减一而最小是负2的7次方

雨燕双飞 提交于 2019-12-02 05:56:42
简书 来我们一步步分析分析: 1.byte占用8位,每位用0或1表示,能够表示256(2^8)个数据。 2.这8位分为符号位(最高位)和数值位(剩余七位),符号位0表示正数,1表示负数。 3.按上一步的理解,容易得到(+127:0111 1111、+1:0000 0001、+0:0000 0000、-0:1000 0000、-1:1000 0001、-127:1111 1111),计算机底层定义了+0(0000 0000)就是0,那么“可怜的-0”又该何去何从呢?计算机遇到这个二进制该如何处理呢?总不能把这两个都对应0吧,这显然是资源浪费。 4.到这里我们都认为最高位是不参与计算数值的,仅仅是一个符号位,按这种思路byte的八位是无论如何也表示不出-128。而“可怜的-0”又不知道自己代表谁,不得而知“可怜的-0”就是-128。(为什么呢?凭什么呢?你说代表-128就代表-128呀!为什么不能是+128、-250、+250.......)。 5.到这里我们已经很粗浅地回答了-128~127中的-128的由来,基本也回答了这个题目。 6.可是然而但是——对于程序员来说,上诉的分析【首先】是结论正确,但是过程错了。错误在于——负数的二进制表示是错误的,比如-127:1111 1111,这是不对的。计算机发现了1111 1111会把它认为是-1而不是-127。【其次】没有解释为什么

snowflake ID生成器

烈酒焚心 提交于 2019-12-02 05:07:29
背景 Snowflake 是 Twitter 内部的一个 ID 生算法, 可以通过一些简单的规则保证在大规模分布式情况下生成唯一的 ID 号码。 其组成为: 第一个 bit 为未使用的符号位。 第二部分由 41 位的时间戳(毫秒)构成,他的取值是当前时间相对于某一时间的偏移量。 第三部分和第四部分的 5 个 bit 位表示数据中心和机器 ID,其能表示的最大值为 2^5 -1 = 31; 最后部分由 12 个 bit 组成,其表示每个工作节点每毫秒生成的序列号 ID,同一毫秒内最多可生成 2^12 -1 即 4095 个 ID。 需要注意的是: 在分布式环境中,5 个 bit 位的 datacenter 和 worker 表示最多能部署 31 个数据中心,每个数据中心最多可部署 31 台节点。 41 位的二进制长度最多能表示 2^41 -1 毫秒即 69 年,所以雪花算法最多能正常使用 69 年,为了能最大限度的使用该算法,你应该为其指定一个开始时间。 由上可知,雪花算法生成的 ID 并不能保证唯一,如当两个不同请求同一时刻进入相同的数据中心的相同节点时,而此时该节点生成的 sequence 又是相同时,就会导致生成的 ID 重复。 所以要想使用雪花算法生成唯一的 ID,就需要保证同一节点同一毫秒内生成的序列号是唯一的。基于此,可以有多种方式 参考链接2 :