原码

计算机基础

你离开我真会死。 提交于 2020-03-22 09:40:08
一,int类型在内存是如何存储的? 数据类型  占用字节数  取值范围  int     4byte   -2^31 ~ 2^31-1 unsigned int  4byte   0 ~2^32 1,占用的比特位数 int占用4个字节,每个字节有8个比特位,所以有32个 0-1 的二进制位数。注意:int类型有正负号,unsigned int 没有正负,所以int要用一位来标识正负 2,符号的表示方法 int类型占用的比特位中,左起第一个位(最高位)就是符号位。0表示正数,1表示负数。其余后面31是数值位。 3,数字0怎么表示? 3.1,因为有了正负数,那么就会有 +0 和 -0 。(注意:0有了两种表示:+0,-0)   +0的表示方法:0000 0000 0000 0000 0000 0000   -0的表示方法:-2^31   0就用 +0 的表示方法 3.2,正数部分 2^31-1 ,之所以要减一,就是因为数字0占用了 +0 。负数不需要表示0,-0 就用来表示 -2^31 3.3,int类型的数字 -1 ,在内存中32个比特位上该如何表示? 10000000 00000000 00000001 左边第一个1表示负号,后面31位表示数值部分“1”。----> 然而,并不是这样的 二,补码 计算机中的符号数有三种表示方法:原码,反码,补码

负数的二进制表示

邮差的信 提交于 2020-03-18 17:35:53
3 月,跳不动了?>>> 计算机中,所有数据最终都是使用二进制数表达。 如何将一个10进制数如何转换为二进制数以及如何将如何将一个16进制数如何转换为二进制数,详见下图。 假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二进制:101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 现在想知道,-5在计算机中如何表示? 在计算机中,负数以其正值的补码形式表达 什么叫补码呢?这得从原码,反码说起。 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 比如:将 00000000 00000000 00000000 00000101 每一位取反,得 11111111 11111111 11111111 11111010 。 称: 11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的,所以也可称: 11111111

c++ 常量/有符号数和无符号数

穿精又带淫゛_ 提交于 2020-03-14 03:59:01
一、宏定义 #define 和常量 const 1、 const关键字 const 是 constant 的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。也就是说const意味着只读(readonly)。 const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化。 1.1 #include <iostream> using namespace std; int main() { const double pi; //圆周率的值用pi表示 pi=3.14159265; cout<<"圆周率的近似值是"<<pi<<endl; return 0; } 报错,没有初始化。只读。 1.2 #include <iostream> using namespace std; int main() { const double pi=3.141592; //圆周率的值用pi表示 cout<<"圆周率的近似值是"<<pi<<endl; return 0; } 1.3 const关键字应用 欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 在一个函数声明中

原码,反码和补码的关系?

我是研究僧i 提交于 2020-03-05 21:42:03
作者:张天行 链接:https://www.zhihu.com/question/23172611/answer/119406298 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 一、 序言第一版答案写于2016年8月,当时我正试图理解补码规则的逻辑,并用结果写了一篇回答发在知乎和公众号上,因为收到的回复很乐观,让我一度认为已经把握问题的全貌。事实上答案在符号位的论述上存在谬误,多亏知友在回复中指出,为此我进行了更深入的思考,重新编辑此答案,希望能更接近问题的本原。 二、 重温运算规则首先我想把整套关于原码反码补码的运算规则准确清晰地写一遍,方便急需应用的知友参考,也希望大家首先能记住这套规定,再开始进一步的探讨。 所谓原码就是机器数,是加了一位符号位的二进制数,正数符号位为0,负数符号位为1,计算机中存储、处理、运算的数据通常是8位、16位、32位或64位的,这里以最简单的8位为例讲解。注意符号位是包含在8位中的其中1位,故可直观读出的数只有7位(只有后7位数可以按权展开)。有心人可能注意到原码是有缺陷的,它只能表示255种状态,因为00000000(+0)和10000000(-0)其实是一个数,因此原码的表示范围成了-127到+127,这个问题需要神奇的补码来解决,因为在补码中10000000被用来表示-128。 所谓反码,英语里又叫ones

java的位运算

风流意气都作罢 提交于 2020-03-04 19:03:16
 在日常的Java开发中,位运算使用的不多,使用的更多的是算数运算(+、-、*、/、%)、关系运算(<、>、<=、>=、==、!=)和逻辑运算(&&、||、!),所以相对来说对位运算不是那么熟悉,本文将以Java的位运算来详细介绍下位运算及其应用。 1、 位运算起源   位运算起源于C语言的低级操作,Java的设计初衷是嵌入到电视机顶盒内,所以这种低级操作方式被保留下来。所谓的低级操作,是因为位运算的操作对象是二进制位,但是这种低级操作对计算机而言是非常简单直接,友好高效的。在简单的低成本处理器上,通常位运算比除法快得多,比乘法快几倍,有时比加法快得多。虽然由于较长的指令流水线和其他架构设计选择,现代处理器通常执行加法和乘法的速度与位运算一样快,但由于资源使用减少,位运算通常会使用较少的功率,所以在一些Java底层算法中,巧妙的使用位运算可以大量减少运行开销。 2、 位运算详解   Java位运算细化划分可以分为按位运算和移位运算,见下表。 细化 符号 描述 运算规则 按位运算 & 与 两位都为1,那么结果为1 | 或 有一位为1,那么结果为1 ~ 非 ~0 = 1,~1 = 0 ^ 异或 两位不相同,结果为1 移位运算 << 左移 各二进制位全部左移N位,高位丢弃,低位补0 >> 右移 各二进制位全部右移N位,若值为正,则在高位插入 0,若值为负,则在高位插入 1 >>>

二进制原码、反码、补码以及Java中的<< 和 >> 和 >>> 详细分析

强颜欢笑 提交于 2020-03-04 18:13:56
1、计算机二进制系统中最小单位bit 在计算机二进制系统中: bit (位) :数据存储的最小单元。 简记为 b ,也称为比特( bit ),每个二进制数字0或1就是一个位( bit ),其中,每 8bit = 1 byte (字节); 再回顾Java 中的数据类型,如 int数据类型 = 4个byte(字节) ,而 1 byte(字节) = 8 bit(位) ;也就我们常说的 int = 32位 (说白了,在二进制系统中是以bit 作为数据存储单元的)。如下 2、有符号数和无符号数 有符号数和无符号数简单的说就是分别对应正数和负数,在二进制系统中是以bit(位)来作为数据存储单元的, 最高位(第一位)是符号位,正数符号位为“0” ,负数符号位为“1” 。 例子: 假设 int number = 1 ,那么number在计算机系统中将表示如下: 00000000 00000000 00000000 00000001 同理可得, number = -1 时,在二进制中表示如下: 10000000 00000000 00000000 00000001 注意:最高位(第一位)是符号位,因为是number值为1是一个正数,所以最高位为0; 3、二进制的原码、反码、补码 原码 原码就是机器数,是加了一位符号位的二进制数(因为数值有正负之分),正数符号位为0,负数符号位为1。 反码

php位运算二进制运算法则

一世执手 提交于 2020-03-04 00:08:47
位运算(二进制运算法则) 位运算 二进制: 所谓的二进制就是逢二进一(0、1)简单,易于电子方式实现 基本概念: 1.二进制的最高位是符号位:0是正数,1是负数。 2.正数的原码,反码,补码都是一样。 3.负数的反码=它的原码符号位不变,其他位取反(0->1,1->0)。 4.负数的补码=它的反码+1 0的反码,补码都是0. 6.Php没有无符号数,换言之,php中数都是有符号的 7.在计算机运算的时候,都是以补码的方式来运算的 二进制三个重要概念 1.原码 2.用二进制表示一个数字,这个码就是原码 1----> 00000000 00000000 00000000 00000101=1 2的零次方+0 2的一次方+1*2的二次方=1+0+4=5 运算规则: 按位与&:两位全为1, 结果为1 按位或|:两位一个为1, 结果为1 按位异或^:两位一个为0,一个为一, 结果是1. 按位取反~ :0->1,1->0。 来源: CSDN 作者: 小祈祈 链接: https://blog.csdn.net/qq839534800/article/details/104641361

原码、补码

佐手、 提交于 2020-03-02 10:21:38
计算机的整型数可以分为有符号数和无符号数。有符号数使用最高位作为符号位。以一个字节(8bits)的存储为例。无符号为表示区间为[0, 255], 有符号数为[-128, 127]。 计算机二进制表示中,整数常用补码表示。正整数时补码和原码是等价的。 原码表示法 使用最高位作为符号位,其余位按照正常的换算方式。例如+1,-1分别表示为0000 0001,1000 0001。两者只有符号为不同。原码表示的区间为[-127, +127]。 补码表示法 正数的补码等于原码,负数的补码等于对应正数的取反加一。 举例来说,+127的补码为0111 1111,-127的补码是1000 0001。 这让负数补码看起来很反直觉。给定一个负数补码,我想知道对应的值,得减一取反得到绝对值再加上负号。这有的加一,有的减一的完全反应不过来。 其实有一种符合直觉的看法,先定义正数补码然后根据正数定义负数补码。基于 x + ( − x ) = 0 x+(-x)=0 x + ( − x ) = 0 x x x 为正数, − x -x − x 就是负数,上式表示为正数加上负数。假设我们已经定义好了正数补码,比如+127(0111 1111)。 我们将负数补码表示定义为与对应正数补码表示相加等于零的数 。因此负数应该表示为(1000 0001),这就是-127。 1000 0001的计算步骤分为两步,

java位运算符

别说谁变了你拦得住时间么 提交于 2020-02-28 07:14:56
一、什么是位运算 位运算是对操作数以二进制为单位进行的操作和运算,运算结果为整数。计算机内部是用补码表示数,位运算是对数的补码进行运算,正数的补码等于原码,负数的补码等于其相反数的原码取反加1。 二、位运算符 1.&(按位与) 参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为1,那么计算结果才为1,否则为0。因此,任何数与0按位与运算,其结果都为0。 2.|(按位或) 参与运算的数字,低位对齐,高位不足的补零。只要对应的二进制位有一个为1,那么结果就为1,否则为0。 3.^(按位异或) 参与运算的数字,低位对齐,高位不足补零,如果对应的二进制位相同,结果为0,否则结果为1。 4.~(按位取反) 只对一个操作数进行运算,将操作数二进制中的1改为0,0改为1. 因为在计算机中使用补码表示,最高位为1表示负数。补码求原码的方法是最高位符号不变,其余各位求反,再加1。 5.<<(左移位) 按二进制形式把所有的数字向左移动对应的位数,符号不变,高位移除(舍弃),低位补零。 6,>>(右移位) 按二进制形式把所有的数向右移动对应的位数,低位移出(舍弃),正数的高位的空位补0,负数的高位的空位补1. 7.>>>(无符号右移) 按二进制形式把所有的数字向右移动相对应的位数,低位移出(舍弃),高位的空位补零(无论正数负数都补零)。 来源: CSDN 作者: 久伴丶.丶 链接:

理解有符号数和无符号数

陌路散爱 提交于 2020-02-28 04:10:10
http://www.cnblogs.com/lazycoding/archive/2011/03/21/unsigned-signed.html 声明网上看到的文章,原文找不到了,原文被转载的不成样子,重复很多,整理花了很长时间,在翻看了维基百科后发现,原文中对于负数原码和补码存在一些问题,修改了一部分,原作者看到后可以联系我。 1、你自已决定是否需要有正负。 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负。如果这个量不会有负值,那么我们可以定它为带正负的类型。 在计算机中,可以区分正负的类型,称为有符类型(signed),无正负的类型(只有正值),称为无符类型。 (unsigned)数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有符类型。 字符类型也分为有符和无符类型。 比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符的整数类型。 2、使用二制数中的最高位表示正负。 首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。不同长度的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。字符类型固定是1个字节,所以最高位总是第7位。 (红色为最高位) 单字节数: 11111111 双字节数: