JAVA按位代码用途&;
对于此代码的输出,实现它的步骤是什么?如果123是01111011和128,以及64和32是10000000,那么输出不应该是00000000吗?As&将任何带0的内容转换为0?真的很困惑。UpCase 由32位有符号整数表示的十进制数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 &将两个整
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 "
在本例中,答案是a0
,第一位为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 "
在本例中,答案是a0
,第一位为0。
向前看,我们取64=01000000
和,然后取123
。注意1
向右移动
10000000
& 01111011
----------
00000000
使用123进行运算,这一次产生一个非零数,第二位是1。重复此过程
第一段代码(大写):
这里65503是32的最大值
从本质上讲,我们从小写字母中减去一个32的值,然后用32的反运算进行和运算。正如我们所知,从小写ASCII值字符中减去32将其转换为大写 “128以及64和32都是10000000”为什么你认为三个不同的数字是同一个数字?这就是大多数在线二进制转换器上显示的可能是零的一些差异“可能是零的一些差异”哈哈,如果你认为100和100000是同一个数字,告诉我的银行账户。这就是为什么我在学习和理解我是否可能错的时候问这个问题。你是否会去看医生,要求他服用流感药物,但却发现你患了癌症,因为你“认为”症状相似?有些东西可能是