Java 16位字符值的第6位在哪里?
在《Java:初学者指南》一书中有两个关于位转换的例子。在这两种情况下,作者都写了关于切换第6位的内容,但他用16位数字进行了演示。这两个示例都使用位运算符来更改字母大小写Java 16位字符值的第6位在哪里?,java,bit-manipulation,bitwise-operators,Java,Bit Manipulation,Bitwise Operators,在《Java:初学者指南》一书中有两个关于位转换的例子。在这两种情况下,作者都写了关于切换第6位的内容,但他用16位数字进行了演示。这两个示例都使用位运算符来更改字母大小写 首先,他对小写字符进行操作:'a'&65503将字符更改为'a'。它被描述为关闭第6位。问题是二进制中的数字65503等于1111111111101111。因此,第11位数字/位被关闭(他甚至在那里显示数字) 他对大写字母和按位OR运算符也做了同样的处理:'a'| 32完成了这个技巧。在二进制中,数字32等于0000 000
'a'&65503
将字符更改为'a'
。它被描述为关闭第6位。问题是二进制中的数字65503
等于1111111111101111
。因此,第11位数字/位被关闭(他甚至在那里显示数字)'a'| 32
完成了这个技巧。在二进制中,数字32等于0000 0000 0010 0000
00
或11
)
任何澄清都非常欢迎。组成二进制数的0和1称为位。位从右开始,然后向左: 所以
0010 0000
:
8th bit 7th bit 6th bit 5th bit 4th bit 3rd bit 2nd bit 1st bit
0 0 1 0 0 0 0 0
十进制与二进制的读取方式相同:
3754
十进制:
(3 x 1000) | (7 x 100) | (5 x 10) | (4 x 1)
二进制的156
=10011100
(1 x 128)|(0 x 64)|(0 x 32)|(1 x 16)|(1 x 8)|(0 x 4)|(0 x 2)|(0 x 1)
在十进制中,当达到10的幂时,在数字的开头(即右侧)添加一个新列
在二进制中,当达到2的幂时,添加一个新列
这有助于解释吗?组成二进制数的0和1称为位。位从右开始,然后向左: 所以
0010 0000
:
8th bit 7th bit 6th bit 5th bit 4th bit 3rd bit 2nd bit 1st bit
0 0 1 0 0 0 0 0
十进制与二进制的读取方式相同:
3754
十进制:
(3 x 1000) | (7 x 100) | (5 x 10) | (4 x 1)
二进制的156
=10011100
(1 x 128)|(0 x 64)|(0 x 32)|(1 x 16)|(1 x 8)|(0 x 4)|(0 x 2)|(0 x 1)
在十进制中,当达到10的幂时,在数字的开头(即右侧)添加一个新列
在二进制中,当达到2的幂时,添加一个新列
这有助于解释吗?第6位的位置可能在几个位置,具体取决于您采用的约定:
0000 0000 0010 0000
65 4321
第6位的位置可能在几个位置,具体取决于您采用的约定:
0000 0000 0010 0000
65 4321
从右开始计数。你从最低有效位开始计数,即从右到左。有些像IBM这样的怪人从左开始计数,但通常从最低有效位开始计数,从右开始计数。你从最低有效位开始计数,即从右到左。有些像IBM这样的怪人从t开始计数他离开了,但一般来说,位是从最低有效位开始计算的。请再加一点:)就好了。根据@daniu(我问题下面的评论),根据比特的重要性,比特计数实际上是从右边开始的。我猜这是因为在进行转换时,右边的一个不必乘以2的某个幂。是这样吗?(+关于0和1的第一句话在这里是可移动的,我想。)请,如果你再加一点:)就太好了。根据@daniu(我问题下面的评论),根据比特的重要性,比特计数实际上是从右边开始的。我猜这是因为在进行转换时,右边的一个不必乘以2的某个幂。是这样吗?(+关于0和1'的第一句在这里是可移动的,我想。)在实践中只使用过3和4,因为改变字号不会改变位索引。在实践中只使用过3和4,因为改变字号不会改变位索引。