>>在Java中做什么?

2022-09-01 18:38:05

好吧,我试图查找,或转移的含义,但是当这个网站解释它时,它超出了我的脑海:http://www.janeg.ca/scjp/oper/shift.html>>

如果和孩子说话,解释是什么?


答案 1

计算机是二进制设备。因此,数字由 1 和 0 的序列表示。

位移位只是简单地将1和0的序列向左或向右移动。

因此,操作员所做的就是将位向右移动一位。>>

考虑数字 101:

// Assuming signed 8-bit integers
01100101 // How 101 is represented in binary
00110010 // After right shifting one bit, this represents 50

在这种情况下,最不重要的位被截断。显然,魔鬼在细节中,但这就是它的全部。

操作员执行相反的操作:<<

// Assuming signed 8-bit integers
01100101 // How 101 is represented in binary
11001010 // After left shifting one bit, this represents -54

// Assuming unsigned 8-bit integers
01100101 // How 101 is represented in binary
11001010 // After left shifting one bit, this represents 202

在这种情况下,由于我只使用了 8 位,因此最高有效位被截断。但是,如果该数字具有更多位,则:

// Assuming signed 16-bit integers
00000000 01100101 // How 101 is represented in binary
00000000 11001010 // After left shifting one bit, this represents 202
00000001 10010100 // After left shifting one bit again, this represents 404

因此,您可能会获得不同的数字,具体取决于要处理的位数以及与这些位关联的数据类型。

补遗:如果您想知道二进制是如何工作的,请考虑十进制数系统是如何工作的。考虑数字5287。它可以这样写:

5287

但你也可以这样写出来:

5287 = (5 * 1000) + (2 * 100) + (8 * 10) + (7 * 1)

然后你可以这样写出来:

5287 = (5 * 10^3) + (2 * 10^2) + (8 * 10^1) + (7 * 10^0)

上面的方程解释了为什么十进制数系统有时被称为以10为基数的系统。十进制数字系统使用 10 位数字 (0-9)。请注意指数如何对应于数字位置。

二进制数系统或以2为基数的系统完全相同,但以数字2为指数的基数,并且仅使用两位数字:0和1。

5287 = 00010100 10100111 (base 2)
     = (0 * 2^15) + (0 * 2^14) + (0 * 2^13) + (1 * 2^12)
     + (0 * 2^11) + (1 * 2^10) + (0 * 2^9)  + (0 * 2^8)
     + (1 * 2^7)  + (0 * 2^6)  + (1 * 2^5)  + (0 * 2^4)
     + (0 * 2^3)  + (1 * 2^2)  + (1 * 2^1)  + (1 * 2^0)

答案 2

我可以假设我正在与之交谈的孩子对二进制有所了解吗?:)

所有数字都可以用某种二进制表示,如下所示:

   Base 10 : Base 2
   1 : 0001
   2 : 0010
   3 : 0011
   4 : 0100
   5 : 0101
   6 : 0110
   7 : 0111
   8 : 1000

...等等。

移位运算符基本上将所有位(1 或 0)移动到一个位置。例如:000111 >> 1

将000111中的所有位移位一个数字以产生以下结果:

000011

000111 << 1

将剩下的所有位移位一个,以产生以下结果:

001110

如果您移位超过一个,那么它只是进一步移动位。

现在,根据你使用的语言和你正在使用的数字类型,它可能比这更复杂一些。例如,如果您正在使用一种语言,其中“最高有效位”(数字中最左边的位)表示数字是否带符号,则该语言必须考虑到这一点。

从数学上讲,如果取一个整数(并忽略溢出的风险,这是由计算机耗尽空间来存储位引起的),则向左移1(<<1)相当于乘以2,而向右移1相当于除以2。(想想二进制数学中的“位置值”值是什么,这是有道理的)