补码

剑指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

Python的二进制位运算

匿名 (未验证) 提交于 2019-12-02 22:51:30
&:按位与 对于整型数据,各种位操作是对该数据的补码进行的(正数的补码与原码相同,下面举例皆以正数为例);对于长整型数据,由于其位宽不定,所以进行位运算时,认为其补码的符号位向外无限扩展。下面对各运算符进行举例说明: (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 对于按位异或,就是对参加运算的两个数字的补码逐位进行逻辑异或运算,即参加运算的两个运算量,如果两个相应位相同,那么该位的结果为0;如果两个相应位不同即相异,那么该位的结果为1。 (4

带符号异或运算

若如初见. 提交于 2019-12-02 22:34:01
-1 ^ -1 << 5 第一步 -1 << 5 -1 << 5 1000 0001 << 5 1010 0000 第二步 -1 ^ 1010 0000 1000 0001 原码 ^ 1010 0000 原码 负数异或需要用补码 1111 1110 反码 ^ 1101 1111 反码 1111 1111 补码 ^ 1110 0000 补码 = 0001 1111 结果为正数,所以结果为1+2+4+8+16=31 结果如果为负数,需要结果-1,再取反(由 原码 -> 取反 -> +1 补码 得 补码 -1 -> 取反 -> 原码) 参考: https://blog.csdn.net/romeo12334/article/details/82261319 来源: https://www.cnblogs.com/liuqiyun/p/11765102.html

原码, 反码, 补码 详解

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

计算机科学基础知识

。_饼干妹妹 提交于 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:53:52
1.接口中的方法只能使用public 和abstract修饰 A:接口中不能有方法体 B:接口中方法只能用public和abstract修饰 总结: 接口中的方法默认public abstract 修饰 接口中的变量默认public final修饰 2.关于构造方法 识别合法的构造方法; 1:构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行; 重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。 2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法; 3 子类通过super关键字调用父类的一个构造方法; 4 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法 5 构造方法 不能被static、final、synchronized、abstract、native修饰 ,但 可以被public、private、protected修饰 ; 6 构造方法不是类的成员方法; 7 构造方法不能被继承。 3.关于原码反码和补码 首先源码,反码,和补码的关系 正数的反码和补码都是自身 负数的反码是符号位不变,别的位去反,负数的补码是符号位不变,源码取反加一

java int

匿名 (未验证) 提交于 2019-12-02 21:52:03
  JAVA是采用Unicode编码。每一个字节占8位。32位系统,每个int是 4个字节,32位。   byte是Java原始类型。byte可存储在[-128,127]范围以内的整数值。   Java中的所有整数值都是32位的int值,除非值后面有l或L(如235L),这表示该值应解释为long。   java中的int的取值范围计算思路如下:32个格子中放满0或1的方法有2的32次方种。所以有两种可能,两种推算方法: 1、将二进制最大的数字(32个1)转换成10进制,即 4294967296 2、有2的32次方种算法,那么依照10进制最大的数就是2的32次方。即4294967296。 所以java中的int的取值范围:2的31次方:+/- 2147483648   int的取值范围为: -2^31――2^31-1,即-2147483648――2147483647 1、对于正数来说,它的补码就是它本身。 2、对于负数来说,它的补码是它对应的正数的二进数所有位取反之后加一。 3、由负数的补码求原码也是相同的操作(所有位取反+1)即为该负数的绝对值   int是4个字节,32位,   10000000 00000000 00000000 00000000 是补码,第一位为符号位,1表示负数,所以   对剩下的位取反,结果为 1111111 11111111 11111111

java学习笔记(2)

荒凉一梦 提交于 2019-12-02 19:55:08
标签(空格分隔): 课程笔记 1. 自动转换 byte short char可以转换成int,但是他们三个之间不能相互转换。 int 可以转换成long,需要在结尾添加l。 int可以转换成float,float 可以转换double。 特殊情况: long 可以转为float,但转换具有不确定性,不推荐。 int a=100; byte b=10; a=b; //将byte转为int 2. 强制类型转换 随便转换,但是会出现溢出等问题。 浮点数转为整数会舍弃小数部分。 boolean true/false ->1/0,分配一个字节存储。但是不能将其强制转换。 int a=500; byte b; b=(byte)a; String类型不是基本数据类型,是属于引用数据类型。 引用数据类型:1.class(字符串在这里) 2.接口 3.数组。 String中加号是字符串拼接的意思 一个重要的例子: int a=20; char b='a'; String c="1"; String ss; ss=a+b+c; //1171 前面a+b是int和char的整数运算,运算之后会和字符串c拼接 ss=c+a+b;//120a 3. 进制 二进制:正数:原码反码补码相同。 负数:反码:符号位不变,其他按位取反,补码:反码加一。 八进制:前面加个0。 十六进制:前面加0x。 System

原码、反码、补码原理

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

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

限于喜欢 提交于 2019-12-02 14:35:05
剑指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