16位char值的第6位在哪里?

时间:2018-11-23 12:52:28

标签: java bit-manipulation bitwise-operators

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

  1. 首先,他使用小写字符:'a' & 65503将字符更改为'A'。它被描述为关闭第六位。问题是二进制数字65503等于1111 1111 1101 1111。因此,第11位/位被关闭(他甚至在此处显示数字)。
  2. 他对大写字母和按位OR运算符所做的操作相同:'a' | 32可以解决问题。数字32等于二进制中的0000 0000 0010 0000

在两种情况下,更改都是有意义的。我只是不明白为什么作者要写第六位。我想知道是用于第11位还是第6对(在那种情况下,我希望完全将其关闭为0011

任何澄清都值得欢迎。

2 个答案:

答案 0 :(得分:3)

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

  1. 将最左边的位计为第零,然后向右移动
  2. 将最左边的位计为第一位,然后向右移动
  3. 将最右边的位计为第零,然后向左移动
  4. 首先将最右边的位计数,然后向左移动
  5. (可能提供其他约定)

为清楚起见,作者应该确实定义了他正在使用的哪一个(在文本中的其他地方也可以这样做)。但显然,他的意思是第4项。

minprice

答案 1 :(得分: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时,您将添加一个新列。

这有助于解释吗?