Java 16位字符值的第6位在哪里?

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

在《Java:初学者指南》一书中有两个关于位转换的例子。在这两种情况下,作者都写了关于切换第6位的内容,但他用16位数字进行了演示。这两个示例都使用位运算符来更改字母大小写

  • 首先,他对小写字符进行操作:
    'a'&65503
    将字符更改为
    'a'
    。它被描述为关闭第6位。问题是二进制中的数字
    65503
    等于
    1111111111101111
    。因此,第11位数字/位被关闭(他甚至在那里显示数字)
  • 他对大写字母和按位OR运算符也做了同样的处理:
    'a'| 32
    完成了这个技巧。在二进制中,数字32等于
    0000 0000 0010 0000
  • 在这两种情况下,这种改变都是有意义的。我只是不明白作者为什么写第六位。如果是第11位或第6对,我会理解(在这种情况下,我希望将其完全关闭为
    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位的位置可能在几个位置,具体取决于您采用的约定:

  • 将最左边的位计算为第零位,然后向右移动
  • 将最左边的位计算为第一位,然后向右移动
  • 将最右边的位计算为第零位,然后向左移动
  • 将最右边的位计算为第一位,然后向左移动
  • (可能有其他公约)
  • 为了清楚起见,作者本应明确说明他使用的是哪一项(在文本的其他地方也可能这样做),但显然,他指的是第4项

    0000 0000 0010 0000
                65 4321
    

    第6位的位置可能在几个位置,具体取决于您采用的约定:

  • 将最左边的位计算为第零位,然后向右移动
  • 将最左边的位计算为第一位,然后向右移动
  • 将最右边的位计算为第零位,然后向左移动
  • 将最右边的位计算为第一位,然后向左移动
  • (可能有其他公约)
  • 为了清楚起见,作者本应明确说明他使用的是哪一项(在文本的其他地方也可能这样做),但显然,他指的是第4项

    0000 0000 0010 0000
                65 4321
    

    从右开始计数。你从最低有效位开始计数,即从右到左。有些像IBM这样的怪人从左开始计数,但通常从最低有效位开始计数,从右开始计数。你从最低有效位开始计数,即从右到左。有些像IBM这样的怪人从t开始计数他离开了,但一般来说,位是从最低有效位开始计算的。请再加一点:)就好了。根据@daniu(我问题下面的评论),根据比特的重要性,比特计数实际上是从右边开始的。我猜这是因为在进行转换时,右边的一个不必乘以2的某个幂。是这样吗?(+关于0和1的第一句话在这里是可移动的,我想。)请,如果你再加一点:)就太好了。根据@daniu(我问题下面的评论),根据比特的重要性,比特计数实际上是从右边开始的。我猜这是因为在进行转换时,右边的一个不必乘以2的某个幂。是这样吗?(+关于0和1'的第一句在这里是可移动的,我想。)在实践中只使用过3和4,因为改变字号不会改变位索引。在实践中只使用过3和4,因为改变字号不会改变位索引。