`
javasogo
  • 浏览: 1817274 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java左移、右移、无符号右移、补码

阅读更多

名词解释:

补码:1 在计算机系统中,数值一律有补码来表示(存储). 使用补码,可以将符号位和其他位统一处理;同时,减法也可按加法来处理.另外,两个用补码表示的数据相加时候,如果最高位(符号位)有进位,则进违被舍弃.

2 补码与原码的转换过程几乎是相同的

数值的补码表示也分两种情况:
(1)正数的补码:与原码相同. 例如,+9的补码是00001001

(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码 0000111按位取反为1111000;再加1,所以-7的补码是11111001.
已知一个数的补码,求原码的操作分两种情况:

(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码.
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取 反,然后再整个数加1.
例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111.
在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”.我在这里稍微介绍一下“模” 的概念:

“模”是指一个计量系统的计数范围.如时钟等.计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”.例如:
  时钟的计量范围是0~11,模=12.
  表示n位的计算机计量范围是0~2(n)-1,模=2(n).【注:n表示指数】
  “模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的
  余数.任何有模的计量器,均可化减法为加法运算.
  例如: 假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:
  一种是倒拨4小时,即:10-4=6
  另一种是顺拨8小时:10+8=12+6=6
  在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替.
  对“模”而言,8和4互为补数.实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特
  性.共同的特点是两者相加等于模.
  对于计算机,其概念和方法完全一样.n位计算机,设n=8, 所能表示的最大数是11111111,若再
  加1称为100000000(9位),但因只有8位,最高位1自然丢失.又回了00000000,所以8位二进制系统的
  模为2(8). 在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以
  了.把补数用到计算机对数的处理上,就是补码.

其他信息参考page http://hi.baidu.com/nijian49508490/blog/item/d1a3bc24ad90616735a80f62.html

分享到:
评论

相关推荐

    java byte相互转换详解左右位移

    在Java中,左移操作符是`,右移操作符是`>>`。右移又分为算术右移和逻辑右移,算术右移在移动时会保持符号位不变(即负数的符号位为1则保持为1),而逻辑右移在移动时不论原来的符号位是什么都用0来填充。 **具体...

    易语言汇编相关左移右移哟

    尽管易语言的语法与传统汇编语言不同,但其仍然支持汇编级别的位操作,例如左移、右移、循环左移、循环右移、按位非等。这些操作在处理二进制数据和进行高效计算时尤为有用。 1. **左移(左移运算符:`)**: 左...

    C语言中的左移与右移

    本文将详细讲解左移与右移的概念、规则以及它们在有符号和无符号数上的不同表现。 首先,左移操作符“”在C语言中用于将一个数的所有位向左移动指定的位数。例如,当我们对一个整数i执行i时,实际上是将i的二进制...

    java位运算符之左移操作视频

    位运算符直接作用于二进制位,它们包括:左移(),右移(>>),无符号右移(>>>),按位与(&),按位或(|),按位异或(^),按位非(~)。这些运算符在处理位级逻辑和数值计算时非常有用。 二、左移操作符() ...

    c语言左移和右移的示例详解

    而右移操作符(>>)在处理有符号整数时通常执行算术右移,保留符号位,无符号整数则进行逻辑右移。 以下是一些示例代码: ```c #include int main() { int num = 8; printf("8 , num ); // 输出16,逻辑左移 ...

    C语言位运算总结位操作基础基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下.pdf

    6. **高低位交换**:对于32位无符号整数,可以通过位操作实现高低16位的交换,例如通过异或和与运算。 掌握这些位运算技巧,不仅可以提高编程效率,还能帮助理解计算机底层的工作原理。在编写高效的算法或解决特定...

    【Java】循环移码和补码.zip

    在Java中,可以使用`>>>`运算符实现无符号右移,相当于循环右移,对于正数和负数都是如此。此外,`运算符用于左移,而`>>`运算符则表示有符号右移,可能会导致负数的非循环移位。循环移码常用于位编码、解码以及位...

    C语言位运算总结位操作基础基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下.docx

    无符号数右移,高位补0;有符号数的右移,各编译器处理方式可能不同,有的补符号位(算术右移),有的补0(逻辑右移)。算术右移保留了原来的符号位,逻辑右移不考虑符号位。 位运算的应用广泛,以下是一些常见的...

    C语言位运算符与或异或 取反 左移和右移.docx

    “右移”运算符(>>)则将一个数的所有位向右移动指定的位数,对于有符号数,左边空出的位置根据原数的符号位填充0(逻辑右移)或1(算术右移,仅适用于整数类型)。例如,10(二进制1010)右移1位后得到5(二进制...

    计算机组成原理第4讲二进制乘法.ppt

    * 单符号位移位规则:左移右移右移,空位补 0 。(右移时第二符号位移至尾数最高位) * 双符号位移位规则:左移右移右移,空位补 0 。(右移时第二符号位移至尾数最高位) 三、补码移位规则 补码移位规则是指在...

    C语言位运算符:与、或、异或、取反、左移和右移.pdf

    例如,-3(-00000011(2))无符号右移两位得到-1(-00000001(2)),因为负数的最高位是1,右移后仍保持为1。 位运算在C语言中可以用来实现高效的算法,如快速设置或清除位,交换两个变量的值(如例子中提到的a和b的交换...

    C语言位运算符与或异或 取反 左移和右移.pdf

    对于无符号整数,高位总是用0填充。 示例: ```c int a = -16; // 11111111111111111111111111100000(2)(补码表示) int result = a >> 1; // 11111111111111111111111111111111(2),所以 result = -8 ``` ...

    补码工具.rar

    右移则有两种方式,逻辑右移(高位用0填充)和算术右移(高位用符号位填充),在处理负数时要特别注意。 3. **比较操作**:比较两个补码数可以判断它们的大小,通过比较结果来执行条件分支。 4. **位操作**:如AND...

    CoreJava全套详细笔记资料.pdf

    * 移位运算符包括左移、右移和无符号右移,用于将数字移动到指定的位置。 * 位运算符包括按位与、按位或、按位异或和按位非,用于对数字进行二进制操作。 * 逻辑运算符包括逻辑与、逻辑或和逻辑非,用于对布尔值进行...

    循环移位补码.rar

    输入一个左边界数值(下记作a),一个右边界数值(下记作b),选择结果类型,如果选择循环移位,输入循环移位数值(正数右移,负数左移),针对 [a, b]区间内的每个数值n,先将十进制变成二进制,按照指定数值(正数...

    C语言位运算符:与、或、异或、取反、左移和右移.docx

    例如,11001011(二进制的-55,负数的补码表示)算术右移一位变成11110111(二进制的-29),因为符号位1被保留,左边空出的位置用1填充。 复合赋值运算符如`&=`、`|=`、`^=`、`和`>>=`结合了位运算符和赋值运算符的...

    计算机组成原理-移位运算.ppt

    补码右移规则是连同符号位一起右移,符号位保持不变。补码左移规则是各位依次左移,最高有效位左移至符号位,末位补0。 逻辑移位是移位对象是一组无数值意义的二进制代码,仅仅数码位置变化,数值大小无变化。规则...

    计算机组成原理补码计算

    在C++中编写补码运算的程序,我们通常会用到位运算符,如按位与(&),按位或(|),按位异或(^),左移()和右移(>>)等。比如,要实现两个有符号整数的加法,我们可以这样做: ```cpp int add(int a, int b) { while (b...

    补码的乘法,除法算法演示,以及浮点数的内码输出代码

    如果不同,结果为负,此时需要将得到的无符号乘积转换为补码表示。 补码的除法算法则相对复杂,通常采用迭代或位移的方法。在迭代法中,会逐步调整被除数,直到它小于除数,这个过程涉及多次的乘法和比较操作。位移...

    JAVA基础补充(0)-原码反码补码.doc

    例如,位左移、位右移等操作在正负数上会有不同的效果,这都源于整数的二进制表示方式。 总之,原码、反码和补码是计算机科学的基础概念,对于Java程序员来说,深入理解这些概念有助于编写更高效、更可靠的代码,...

Global site tag (gtag.js) - Google Analytics