JAVA按位代码用途&;

JAVA按位代码用途&;,java,bitwise-operators,Java,Bitwise Operators,对于此代码的输出,实现它的步骤是什么?如果123是01111011和128,以及64和32是10000000,那么输出不应该是00000000吗?As&将任何带0的内容转换为0?真的很困惑。UpCase 由32位有符号整数表示的十进制数66503是二进制的00000000000001 00000011 11000111 由8位字符表示的ASCII字母a是二进制的0110001(十进制为97) 将字符强制转换为32位有符号整数将给出000000000000000000001100001 &将两个整

对于此代码的输出,实现它的步骤是什么?如果123是01111011和128,以及64和32是10000000,那么输出不应该是00000000吗?As&将任何带0的内容转换为0?真的很困惑。

UpCase

由32位有符号整数表示的十进制数
66503
是二进制的
00000000000001 00000011 11000111

由8位字符表示的ASCII字母
a
是二进制的
0110001
(十进制为97)

将字符强制转换为32位有符号整数将给出
000000000000000000001100001

&
将两个整数相加得到:

//following code displays bits within a byte

class Showbits {
  public static void main(String args[]) {
  int t;
  byte val;

  val = 123;
  for(t = 128; t > 0; t = t/2) {
   if((val & t) != 0) 
    System.out.print("1 ");
    else System.out.print("0 ");
   }

  }
 }
 //output is 0 1 1 1 1 0 1 1
将其转换回char后得到
01000001
,即十进制65,即ASCII字母
A

Showbits

不知道你为什么认为
128
64
32
都是
10000000
。它们显然不可能是相同的数字,因为它们是不同的数字
10000000
是十进制的
128

for循环所做的是从
128
开始,通过每一个连续的次最小幂2:
64
32
16
8
4
2
1

以下是二进制数:

00000000 00000000 00000000 01100001
00000000 00000001 00000011 11000111
===================================
00000000 00000000 00000000 01000001
因此,在每个循环中,它将给定值与这些数字中的每一个一起打印,当结果为
0
时打印
“0”
,否则打印
“1”

例如:

val
123
,它是
011111011

因此,循环将如下所示:

128: 10000000
 64: 01000000
 32: 00100000
 16: 00010000
  8: 00001000
  4: 00000100
  2: 00000010
  1: 00000001

因此,最终输出是
“011011”
,这是完全正确的。

UpCase

由32位有符号整数表示的十进制数
66503
是二进制的
00000000000001 00000011 11000111

由8位字符表示的ASCII字母
a
是二进制的
0110001
(十进制为97)

将字符强制转换为32位有符号整数将给出
000000000000000000001100001

&
将两个整数相加得到:

//following code displays bits within a byte

class Showbits {
  public static void main(String args[]) {
  int t;
  byte val;

  val = 123;
  for(t = 128; t > 0; t = t/2) {
   if((val & t) != 0) 
    System.out.print("1 ");
    else System.out.print("0 ");
   }

  }
 }
 //output is 0 1 1 1 1 0 1 1
将其转换回char后得到
01000001
,即十进制65,即ASCII字母
A

Showbits

不知道你为什么认为
128
64
32
都是
10000000
。它们显然不可能是相同的数字,因为它们是不同的数字
10000000
是十进制的
128

for循环所做的是从
128
开始,通过每一个连续的次最小幂2:
64
32
16
8
4
2
1

以下是二进制数:

00000000 00000000 00000000 01100001
00000000 00000001 00000011 11000111
===================================
00000000 00000000 00000000 01000001
因此,在每个循环中,它将给定值与这些数字中的每一个一起打印,当结果为
0
时打印
“0”
,否则打印
“1”

例如:

val
123
,它是
011111011

因此,循环将如下所示:

128: 10000000
 64: 01000000
 32: 00100000
 16: 00010000
  8: 00001000
  4: 00000100
  2: 00000010
  1: 00000001

因此,最终的输出是
“01101”
,这是完全正确的。

第二段代码(显示位):

代码实际上正在转换。该算法使用了一些位魔法,主要是

考虑数字
123=01111011
128=10000000
。当我们和他们在一起时,我们得到的是
0
或非零数字,这取决于
128
中的
1
是用
1
还是
0

128: 10000000 & 01111011 = 00000000 -> prints "0 "
 64: 01000000 & 01111011 = 01000000 -> prints "1 "
 32: 00100000 & 01111011 = 00100000 -> prints "1 "
 16: 00010000 & 01111011 = 00010000 -> prints "1 "
  8: 00001000 & 01111011 = 00001000 -> prints "1 "
  4: 00000100 & 01111011 = 00000000 -> prints "0 "
  2: 00000010 & 01111011 = 00000010 -> prints "1 "
  1: 00000001 & 01111011 = 00000001 -> prints "1 "
在本例中,答案是a
0
,第一位为0。 向前看,我们取
64=01000000
和,然后取
123
。注意
1
向右移动

  10000000
& 01111011
----------
  00000000
使用123进行运算,这一次产生一个非零数,第二位是1。重复此过程

第一段代码(大写):

这里65503是32的最大值


从本质上讲,我们从小写字母中减去一个32的值,然后用32的反运算进行和运算。正如我们所知,从小写ASCII值字符中减去32将其转换为大写

第二段代码(显示位):

代码实际上正在转换。该算法使用了一些位魔法,主要是

考虑数字
123=01111011
128=10000000
。当我们和他们在一起时,我们得到的是
0
或非零数字,这取决于
128
中的
1
是用
1
还是
0

128: 10000000 & 01111011 = 00000000 -> prints "0 "
 64: 01000000 & 01111011 = 01000000 -> prints "1 "
 32: 00100000 & 01111011 = 00100000 -> prints "1 "
 16: 00010000 & 01111011 = 00010000 -> prints "1 "
  8: 00001000 & 01111011 = 00001000 -> prints "1 "
  4: 00000100 & 01111011 = 00000000 -> prints "0 "
  2: 00000010 & 01111011 = 00000010 -> prints "1 "
  1: 00000001 & 01111011 = 00000001 -> prints "1 "
在本例中,答案是a
0
,第一位为0。 向前看,我们取
64=01000000
和,然后取
123
。注意
1
向右移动

  10000000
& 01111011
----------
  00000000
使用123进行运算,这一次产生一个非零数,第二位是1。重复此过程

第一段代码(大写):

这里65503是32的最大值


从本质上讲,我们从小写字母中减去一个32的值,然后用32的反运算进行和运算。正如我们所知,从小写ASCII值字符中减去32将其转换为大写

“128以及64和32都是10000000”为什么你认为三个不同的数字是同一个数字?这就是大多数在线二进制转换器上显示的可能是零的一些差异“可能是零的一些差异”哈哈,如果你认为100和100000是同一个数字,告诉我的银行账户。这就是为什么我在学习和理解我是否可能错的时候问这个问题。你是否会去看医生,要求他服用流感药物,但却发现你患了癌症,因为你“认为”症状相似?有些东西可能是