美文网首页
Java 原码、反码、补码,位运算符(&、|、~、^),移位运算

Java 原码、反码、补码,位运算符(&、|、~、^),移位运算

作者: 颓废骚年 | 来源:发表于2020-06-17 18:06 被阅读0次

1、原码

原码的组成:符号位(“0”代表正数、“1”代表负数)+数值的绝对值的二进制表示。
原码不能直接参与运算。
以八位二进制数为例:5的原码 = 0000 0101,-5的原码 = 1000 0101

2、反码

正数的反码等于它的原码,负数的反码就是原码符号位除外,其他位按位取反。
以八位二进制数为例:5的反码 = 0000 0101,-5的反码 = 1111 1010

3、补码

正数的补码等于它的原码,负数的补码就是它的反码+1。
在计算机系统中,数值一律用补码来表示和存储。
补码表示统一了符号位和数值位,简化了运算。
以八位二进制数为例:5的补码 = 0000 0101,-5的补码 = 1111 1011
补码的补码等于原码。

位运算符(ps:参与运算的都是补码)

按位与运算符(&)

参与运算的两数各对应的二进位相与,对应的两个二进位都为1,结果位才为1。

按位或运算符(|)

参与运算的两数各对应的二进位相或,对应的两个二进位有一个为1,结果位就为1。

按位异或运算符(^)

对应的两个二进位不同、结果位为1,相同、结果位为0。

按位取反运算符(~)

如果位为0,结果是1,如果位为1,结果为0。
对所有整数取反 = 本身的相反数-1。例:~9 = -10,~-4 = 3

移位运算(ps:参与运算的都是补码)

左移运算符(<<)

运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃,ps:符号位也会被舍弃),低位的空位补零。
在没有溢出的情况下,m << n 等于 m * 2^n

带符号右移运算符(>>)

运算规则:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了

无符号右移运算符(>>>)

运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同

在移位运算时,如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位

相关文章

  • Java 原码、反码、补码,位运算符(&、|、~、^),移位运算

    1、原码 原码的组成:符号位(“0”代表正数、“1”代表负数)+数值的绝对值的二进制表示。原码不能直接参与运算。以...

  • Python基础之位运算符(含原码反码补码的通俗解释)

    目录 1 二进制 2 原码、反码、补码 3 位运算符 4 位运算符使用技巧 上回学习运算符时,漏了位运算符,因为位...

  • 2018-10-22 Python31 原码、反码、补码

    原码、反码、补码 1)如何计算补码?规则: 正数:原码 = 反码 = 补码负数:反码 = 符号位不变,其他位取反补...

  • 数据的表示

    1位符号位+7位数值位正数:原码=反码=补码负数:反码=原码数值位取反 符号位不变补码=反码+1补码的表示范围位数...

  • 补码

    原码、反码、补码 原码:符号位 反码:减法变加法 补码:+1解决-0问题 数学原理 同余 反码:mod127 补码...

  • 原码 反码 补码 位运算符

    原码 原码是电脑运算的名词,是指“未经更改”的码。为了便于ALU(算术逻辑单元)的设计,又发展出反码、补码等转换过...

  • 原码、反码、补码

    规则: 计算机运算时,都是以补码的形式进行 正数的反码和补码都与原码相同。 负数的反码为对该数的原码除符号位外各位...

  • 原码、反码和补码

    正数的原码、反码和补码相同,亦是正数 负数的原码、反码和补码符号位为1,代表负数,反码在原码的基础上符号位不变,其...

  • [计基]-二进制之补码

    一.基础名词 原码 : 0011 反码 :0011(原码) >> 1100(反码) (原码按位取反) 补码 :00...

  • 计算机组成原理定点数的运算

    1.定点数移位运算算数移位:正数:移位后添0负数:原码添零,补码左0右1,反码全部填1 逻辑移位:将操作数看作无符...

网友评论

      本文标题:Java 原码、反码、补码,位运算符(&、|、~、^),移位运算

      本文链接:https://www.haomeiwen.com/subject/uwhsxktx.html