八宝山做网站公司,国内买机票的网站建设,wordpress头像旋转,设计说明模板在Java中#xff0c;位移运算属于基本运算#xff0c;符号是#xff0c;即向左位移和向右位移。在Java中只有整数才能位移#xff0c;所以其他的不考虑#xff0c;位移运算是将整数在内存中表示的二进制进行位移#xff0c;所以在Java中分为正数和负数的位移。对…在Java中位移运算属于基本运算符号是即向左位移和向右位移。在Java中只有整数才能位移所以其他的不考虑位移运算是将整数在内存中表示的二进制进行位移所以在Java中分为正数和负数的位移。对于正数来说向左位移即相当于除以2注意是整数除以整数。例如 5 1 即5/22。下面举例说明51我们以int为例数字5int型的二进制表示为 0000 0000 0000 0000 0000 0000 0000 0101向左移1位即 0000 0000 0000 0000 0000 0000 0000 1010 (后位补0)所以结果为数字1051我们以int为例数字5int型的二进制表示为 0000 0000 0000 0000 0000 0000 0000 0101向右移1位即 0000 0000 0000 0000 0000 0000 0000 0010 (高位补0)所以结果为数字2所以对于正数可以随意使用位移与乘除几乎没有结果的区别而且性能更优。而对于负数来说Java中的位移应该谨慎使用因为位移运算在Java中称为带符号的位移。那么到底带符号的位移是如何计算的呢下面直接举例说明-51我们以int为例由于负数在内存是以补码存在请看数字-5int型的二进制原码表示为 1000 0000 0000 0000 0000 0000 0000 0101而其反码为1111 1111 1111 1111 1111 1111 1111 1010补码为1111 1111 1111 1111 1111 1111 1111 1011向左移1位即结果为1111 1111 1111 1111 1111 1111 1111 0110 (后位补0)将结果计算反码为1111 1111 1111 1111 1111 1111 1111 0101将结果计算原码为1000 0000 0000 0000 0000 0000 0000 1010所以结果为数字-10看起来好像还是乘以2但是换个数字来试试例如数字的二进制如果为1110 0000 0000 0000 0000 0000 0000 0001而其反码为1001 1111 1111 1111 1111 1111 1111 1110补码为1001 1111 1111 1111 1111 1111 1111 1111向左移1位即结果为0011 1111 1111 1111 1111 1111 1111 1110这个结果的最高位是0所以必然是个正数所以结果并非想象的乘以2。如果是右移那么高位会补1结果一样不算正常例如-51我们以int为例由于负数在内存是以补码存在请看数字-5int型的二进制原码表示为 1000 0000 0000 0000 0000 0000 0000 0101而其反码为1111 1111 1111 1111 1111 1111 1111 1010补码为1111 1111 1111 1111 1111 1111 1111 1011向右移1位即结果为1111 1111 1111 1111 1111 1111 1111 1101 (高位补1)将结果计算反码为1111 1111 1111 1111 1111 1111 1111 1100将结果计算原码为1000 0000 0000 0000 0000 0000 0000 0011所以结果为数字-3而在Java中-5除以2应该结果为-2但是位移却为-3。另外如果是下面的例子-11我们以int为例由于负数在内存是以补码存在请看数字-1int型的二进制原码表示为 1000 0000 0000 0000 0000 0000 0000 0001而其反码为1111 1111 1111 1111 1111 1111 1111 1110补码为1111 1111 1111 1111 1111 1111 1111 1111向右移1位即结果为1111 1111 1111 1111 1111 1111 1111 1111 (高位补1)所以结果不用慢慢算就知道为数字-1所以对于-1来说无论怎么右移结果还是-1而如果是除以2结果是0。最后总结一句如果是正数当可以使用位移运算时可以尽量使用能提升性能而对于负数来说还是尽量别用吧结果与除法相差太远。