精华内容
下载资源
问答
  • 、位运算 二、位移运算 三、二进制数以Java中最常...递增:二进制数右端每次加1(逢2进1),一直到31符号位的0全部变为1,得到最大的正整数2147483647。⑵ -1最大的负整数,符号位为1,其它31位也全部为1。递...

    一、位运算

    0818b9ca8b590ca3270a3433284dd417.png

    二、位移运算

    0818b9ca8b590ca3270a3433284dd417.png

    三、二进制数

    以Java中最常使用的int类型为例(32位)。

    0818b9ca8b590ca3270a3433284dd417.png

    ㈠ 符号位

    二进制数最左端的数字为符号位:0代表正,1代表负。

    ㈡ 最大与最小

    ⑴  1是最小的正整数,符号位为0,最后一位为1,其它全部为0。

    递增:二进制数右端每次加1(逢2进1),一直到31个非符号位的0全部变为1,得到最大的正整数2147483647。

    ⑵ -1是最大的负整数,符号位为1,其它31位也全部为1。

    递减:二进制数右端每次减1(逢0借1),一直到31个非符号位的1全部变成0,得到最小的负整数为-2147483648。

    ㈢ 原码、补码、反码

    ⑴ 原码

    根据数学上的表示习惯:“+”代表为正数,只要将“+”变为“-”,那么就是对应的负数。譬如 +1 对应的负数为 -1。

    根据这个原则,二进制数的负数表示本来应该如下图:

    0818b9ca8b590ca3270a3433284dd417.png

    以正数的二进制数表示为基准,负数的表示只改变符号位,这样的表示方式就是原码。因此,正数的表示方式都是原码。

    事实上的二进制的负数并不是如上面的原码这样表示,譬如-1是32个1。那么这样的表示方式是如何得到的呢?

    ⑵ 反码

    反码就是将原码除符号位以外的值全部取反,原来是1的变为0,原来是0的变为1。例如使用-1的原码得到的反码如下图所示:

    0818b9ca8b590ca3270a3433284dd417.png

    ⑶ 补码

    补码就是在反码的基础上,在二进制数的右端末位加1(逢2进1)。如下图所示:

    0818b9ca8b590ca3270a3433284dd417.png

    对比本节开始的图,你会发现补码的32个1正是十进制表示的 -1。

    原码、反码和补码都是计算机的定点表示法。事实上,当前的绝大多数计算机使用的都是补码表示法,虽然历史上曾经生产过反码表示的计算机。

    C语言标准没有明确规定必须使用补码表示法,Java则明确规定了必须使用补码表示法。

    ⑷ 总结

    正数的原码和反码和补码都一致;负数的原码是正数的符号位取反;负数的反码是原码的非符号位取反;负数的补码是反码加1。

    但,使用补码表示有何好处呢?

    ㈣ 补码的好处

    以 +1 和 -1 作加法运算为例,如下图所示:

    0818b9ca8b590ca3270a3433284dd417.png

    相信你已经发现,1 + (-1) 这样的加法运算只要将二进制数相加,然后-1的末位就会变成2,根据逢2进1机制,从右至左依次所有位都会变成0。

    最后,最左端的符号位也会进位1变成0,丢弃溢出的1,就得到最后的结果0的二进制表示32个0。

    对照本节开头的图,会发现所有的减法都可以转换成二进制位的加法运算:1-2 可以转换成1+(-2),(-1)-(-2)可以转换成-1+2……

    这跟数学中的表示是一样的,而且非常地方便计算(很多计算机科学家都是从数学领域转入计算机工程,所以在很多细微之处的都能见到数学的影子)。因此,现代计算机硬件结构实际上只设计了加法器,大部分的减法其实都是转换成加法后再运算。

    四 小技巧

    ⑴ 乘法除法:n * 2 等价于 n << 1; n * 5 等价于 n << 2 + 1; n / 2 等价于 n >> 1。

    备注:JVM执行时会自动转化,大部分其它高级语言的编译器会做类似优化转换,所以除非有特殊的理由,否则别这么写。

    ⑵ 取低位:n & 0x0000FFFF;取高位:n & 0xFFFF0000。

    ⑶ 奇偶判断:n & 1,等于0为偶,等于1为奇。

    ⑷ 正负判断:(n >>> 31) & 1,等于0为正,等于1为负。

    ⑸ 取余:n % m ,如m为2的幂次方,可用(n & (m - 1))替代。

    …………

    网上有很多类似的小技巧,有兴趣的读者可以自行搜索。

    本文简单了介绍二进制的基本常识,希望能帮助大家在阅读源码、学习汇编和操作系统等底层原理时能更好地理解内容,与及帮助下那些在学习原码、反码、补码时被很多博客或者资料绕得云里雾里的人们。

    最后,如有错误之处请务必指正,谢谢!

    参考资料:

    《深入理解计算机系统》Randal E.Bryant  David R.O’Hallaron

    展开全文
  • c++中带符号二进制数的表示

    千次阅读 2019-05-21 09:42:27
    c++中带符号二进制数的表示 一、二进制表示带符号数方法: (1)最高位为1表示负数,最高位为0表示正数; (2)哪一位是最高位取决于变量类型的字节数; eg:在win32控制台应用程序中,int是32位,即是4字节的类型,...

    c++中带符号二进制数的表示

    一、二进制表示带符号数方法:

    (1)最高位为1表示负数,最高位为0表示正数;

    (2)哪一位是最高位取决于变量类型的字节数;

    eg:在win32控制台应用程序中,int是32位,即是4字节的类型,当我们定义int i;那么这个i的最高位在从左数第三十一位(默认左一为第0位)。

    二、原码补码反码:

    (1)正数:原码补码反码是一样的;

    (2)负数:负数的原码除了最高位为1,其余和正数一致,其反码除了最高位不变其余位为按位取反,补码为反码加1;

    eg:对于win32平台:

    22的原码为0000 0000 0000 0000 0000 0000 0001 0110

    22的反码为0000 0000 0000 0000 0000 0000 0001 0110

    22的补码为0000 0000 0000 0000 0000 0000 0001 0110

    -22的原码为1000 0000 0000 0000 0000 0000 0001 0110

    -22的反码为1111 1111 1111 1111 1111 1111 1110 1001

    -22的补码为1111 1111 1111 1111 1111 1111 1110 1010

    三、编程中所有数都用数的补码来表示为机器字:

    (1)即22在机器中表示为0000 0000 0000 0000 0000 0000 0001 0110

    (2) -22在机器中表示为1111 1111 1111 1111 1111 1111 1110 1010

    四、实例:加减法带来的数据溢出问题

    在这里插入图片描述
    int 型数据最大值是2147483647

    2147483646的二进制表示为  01111111 11111111 11111111 11111110
    +6					    00000000 00000000 00000000 00000110
    结果                    10000000 00000000 00000000 00000100
    最高位除外,取反          11111111 11111111 11111111 11111011      (-2147483643)
    补码(+1)               11111111 11111111 11111111 11111100	   (-2147483644)
    
    得出-1073741822
    
    展开全文
  • 标签:计算机中的数字二进制方式存储的,第一个二进制位为符号位,0代表正数,1代表负数原码、反码、补码计算机中存储数字使用的编码1、原码、反码、补码的概念原码:符号位加上这个绝对值例如正整数1的8位...

    标签:

    计算机中的数字是以二进制方式存储的,第一个二进制位为符号位,0代表正数,1代表负数

    原码、反码、补码是计算机中存储数字使用的编码

    1、原码、反码、补码的概念

    原码:符号位加上这个数绝对值

    例如正整数1的8位二进制原码为 00000001      负整数-1的8为二进制原码为 10000001

    反码:正数的反码就是其本身,负数的反码就是在原码的基础上除符号位外所有的位取反

    例如正整数1的8位二进制原码为 00000001  则其反码还为 00000001

    负整数-1的8为二进制原码为 10000001  其反码为 11111110

    补码:正数的补码是其本身,负数的补码为其反码再加1

    例如正整数1的8位二进制原码为 00000001  则其补码还为 00000001

    负整数-1的8为二进制原码为 10000001  其反码为 11111110  其补码为   11111110 + 00000001 = 11111111

    2、Java语言中的数字是以补码方式存储的

    验证如下:

    20180110213144370658.png

    由负整数10无符号右移一位得正2147483643可知Java中数字的存储方式为补码

    分析:

    如果存储方式为原码 则-10 存储的二进制表示为   10000000 00000000 00000000 00001010  无符号右移一位 得   01000000 00000000 00000000 00000101   此数十进制为 1073741829

    如果存储方式为反码 则-10 存储的二进制表示为   11111111 11111111 11111111 11110101  无符号右移一位 得   01111111 11111111 11111111 11111010  此数十进制为 2147483642

    如果存储方式为补码 则-10 存储的二进制表示为   11111111 11111111 11111111 11110110  无符号右移一位 得   01111111 11111111 11111111 11111011  此数十进制为 2147483643

    Java中负整数10无符号右移一位得正2147483643与存储方式为补码分析出来的结果相同

    所以Java中数字存储方式为补码。

    标签:

    展开全文
  • 即0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都叫位运算,即将符号位共同参与运算的运算。位运算就是直接对整数在内存中的二进制位进行操作。 我们来一一介绍下有几种位运算符:(上面A,下面...

    位运算

    先来谈谈位运算背景

    在现代计算机中所有的数据都是以二进制的形式存储在设备中。即0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。在现代计算机中所有的数据都是以二进制的形式存储在设备中。即0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。位运算就是直接对整数在内存中的二进制位进行操作

    我们来一一介绍下有哪几种位运算符:(上面是A,下面是B,拿 8 位举例

    • 按位与( & )

      对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1,如下图:

      A:1111 1100
      B:0011 1111

      (A & B) 结果为 60 , 二进制为 0011 1100


       
    • 按位或( | )
       

      比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1),如下图:

      A:1011 0010
      B:0101 1110

      (A | B) 结果为 254 , 二进制为 1111 1110


       

    • 按位异或( ^ )

      比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0,如下图:

      A:0001 0100
      B:0000 0101

      (A ^ B) 结果为 17 , 二进制为 0001 0001

    • 按位取反( ~ )

      对一个操作数的每一位都取反,如下图:

      A:0000 1111  ,十进制为:15

      (~A ) 结果为 240 , 二进制为 1111 0000


       
    • 按位左移( << )

      将操作数的所有位向左移动指定的位数。

      下图展示了11111111 << 1(11111111 左移一位)的结果。
      蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。

      A:1111 1111 ,十进制为:255

      (A << 1)结果为 254 , 二进制为 1111 1110



       
    • 按位右移( >> )

      将操作数的所有位向又移动指定的位数。

      下图展示了11111111 >> 1(11111111 右移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。右移对于无符号类型强制补0,对于有符号类型续补符号位

      A:1111 1111 , 十进制为:255

      A >> 1 结果为 126 , 二进制为 0111 1111

    • 无符号右移( >>> )(没有无符号左移( <<< )

      无符号右移,忽略符号位,空位都以0补齐

      >>>与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。

    以上就是位运算的运算符。

    下面我们来聊一下,

    Java高性能运算之对于乘法的优化

    我们都知道位运算是公认的高效运算,Java对于数值非常大的数做乘法依然处理的很快,这是因为做了位运算优化。

    我们先来举个例子:

    对十进制数:90,做位运算 90 << 3,结果应该是多少?

    答案肯定是:90000,即 90 * 10^3.

    那么对于二进制数也是如此,

    int a = 90;
    a = a << 3;
    System.out.println(a);

    运行结果:

    720
    

    90在计算机中以二进制形式存储,左移 3 位,就相当于 90 * 2^3 = 720.

    那么回到Java乘法优化这里,

    123 * 237

    =123 * 128 + 123 * 64 + 123 * 32 + 123 * 8 + 123 * 4 + 123 * 1

    =123 << 7 + 123 << 6 + 123 << 5 + 123 << 3 + 123 << 2 +123

    这样算起来是不是就要快了许多。

    对于乘法和以及%运算,JVM一定会优化,这些是不需要程序员去考虑的,直接去用 * 、% 即可。

    参考链接:https://jingyan.baidu.com/article/1612d5008ff5b7e20f1eee4c.html

    展开全文
  • 计算机中的信息表示

    2021-02-19 07:45:56
    计算机中的信息表示 ...权:一个数字符号出现在中的不同数位上,其代表的数值不同的。一个数字符号所表示的数值就等于该数字乘以一个与它所在数位有关的常数,这个常数就做权。 进位计数制之间的转换 二进制
  • 异或运算基于二进制运算,采用符号XOR或者^来表示,运算规则就与二进制,如果同值取0、异值取1。 性质: 交换律 可以任意交换运算因子,结果不变。如:a ^ b = b ^ a 结合律 (a^b)^c=a^(a^c) 对于...
  • Class文件中字节序为Big-Endian,最高字节在地址最低、最低字节在地址最高Class文件中只有2种数据类型:无符号数和表魔和Class文件版本每个Class文件的头四个字节称为魔,用于确定这个文件是否为一个能...
  • 原码:二进制的在最高位数若为1, 则表示这个数为负数,最高位数为0,表示负数,其值大小就是最高位数除外的二进制转换成10进制的大小,最高位数表示符号;反码:二进制的在最高位数若为1, 则表示...
  • 已知一个指令地址是FF10:1100H下面对寄存器内容描述正确的选项是哪一个:CS=FF10H,IP=1100H 一个存储空间地址3000H~BFFFH,问存储空间大小 填空题 99的级制、16进制、BCD码 给了一个补码,求它的真值、原码、...
  • 关于课上实验中对小数的处理中...原码:二进制的在最高位数若为1, 则表示这个数为正数,最高位数为0,表示负数,其值大小就是最高位数除外的二进制转换成10进制的大小,最高位数表示符号; 反码:二进制的在最高...
  • 计算机原理习题.pptx

    2020-11-02 09:34:33
    1 分数: 1 在计算机中有符号数是用 表示的 选择一个答案;分数: 1 三输入与非门的输入端ABC 的状态分别为 101则其输出状态为 答案;10 分数: 1 下面种语言能够被计算机硬件直接识别并执行 选择一个答案;分数: 1 用 ...
  • 2021CSP-J1

    2020-12-27 09:21:32
    2020CSP-J1 2020CSP-J1 一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项) ...3.8位二进制数中去掉符号位,最多能表示多少个字符( ) A. 127 .
  • 3、掌握二进制、十进制、十六进制数间的相互转换,要熟练掌握将8位二进制数转换为相应的十进制数,能熟练的将0~255范围内的十进制数转换为二进制数,能将十六进制数转换成二进制形式,能将二进制转换成十六进制表示...
  •  实例052 开发一个进制转换器 66 3.4 日期时间格式的数据处理 67  实例053 动态获得系统当前日期和时间 67  实例054 手动设置系统日期时间 69  实例055 根据生日自动计算员工年龄 70  实例056 根据年份...
  • 微机学习要求答案

    2018-11-27 19:19:38
    3、掌握二进制、十进制、十六进制数间的相互转换,要熟练掌握将8位二进制数转换为相应的十进制数,能熟练的将0~255范围内的十进制数转换为二进制数,能将十六进制数转换成二进制形式,能将二进制转换成十六进制表示...
  • 2020-11-30

    2020-11-30 16:28:31
    float占4字节,32个二进制位, 位表示符号位,8bit表示指数,23bit表示底数,8位最小00000000,最大11111111,范围也就是0 ~ 255。而long8字节,也就是64位,除去符号位,指数范围0 ~ 63,都直接都...
  • 1.原反补码都带符号的二进制bit位中,最高位为符号位,0代表正,1代表负。其余各位数据位。 2.在正数中,原码=反码=补码。 3.在负数中,反码在原码的基础上,符号位不变,其余各位按位取...
  • 你必须知道的495C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    5.9 如果NULL和0作为空指针常量等价的,那我到底该用哪一个呢? 5.10但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 5.11 我曾经使用过一个编译器,不使用NULL就...
  • 计算机基础

    2010-02-22 13:06:10
    字节和字符: 字符通过字节表现出来的。...计算机中存储数据的单元,一个8二进制数是一个很具体的存储空间。如 0x01, 0x45, 0xFA, …… 区别:通过编码,具体把某一个字符编码成了几个字节,我们只...
  • 《你必须知道的495C语言问题》

    热门讨论 2010-03-20 16:41:18
    5.9 如果NULL和0作为空指针常量等价的,那我到底该用哪一个呢? 58 5.10 但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 58  5.11 我曾经使用过一个编译器,不...
  • 5.9 如果NULL和0作为空指针常量等价的,那我到底该用哪一个呢? 58 5.10 但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 58  5.11 我曾经使用过一个编译器,不...
  • 、阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几概念,然后编写示例程序,对正数、负数进行各种操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述种码表示的。...
  • UVA 1590 IP Networks JAVA

    2019-01-27 22:08:00
    思路:①子网掩码:先将数据转为二进制,判断从哪一位开始有数据不一样,记下下标index,则子网掩码index的前面1,后面0(2#),就是子网掩码,再转为10#输出; ②最小网络地址:用任意一个IP与子网掩码进行按...
  • 5.9 如果NULL和0作为空指针常量等价的,那我到底该用哪一个呢? 87 5.10 但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0)不是更好吗? 87 5.11 我曾经使用过一个编译器,不使用...
  • 5.9 如果NULL和0作为空指针常量等价的,那我到底该用哪一个呢? 87 5.10 但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0)不是更好吗? 87 5.11 我曾经使用过一个编译器,不使用...
  • modbus通信协议

    热门讨论 2010-08-06 15:26:22
    当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。 地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式...
  • 5.9 如果NULL和0作为空指针常量等价的,那我到底该用哪一个呢?  5.10但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 5.11 我曾经使用过一个编译器,不使用NULL就不...
  •  5.9 如果NULL和0作为空指针常量等价的,那我到底该用哪一个呢? 5.10但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 5.11 我曾经使用过一个编译器,不使用NULL就...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
关键字:

二进制数符号位是哪一个