我有以下Java代码:
byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;
打印出来的结果是254,但是我不知道这个代码是如何工作的。如果
它有助于减少大量的代码。它偶尔用于由8位组成的RGB值。
其中0xff表示24(0)和8(1),如00000000 00000000 00000000 11111111
它有效地掩蔽了变量,因此它只留下最后8位中的值,并忽略所有其余的位
在尝试将颜色值从特殊格式转换为标准RGB值(8位长)的情况下最常见。
很好的解释,请看这里
从http://www.coderanch.com/t/236675/java-programmer-SCJP/certification/xff
十六进制文字0xFF是一个相等的整数(255)。Java将int表示为32位。它在二进制中看起来像这样:
00000000 00000000 00000000 11111111
当您按位执行此操作时,在任何数字上使用此值(255),它将屏蔽(置零)除数字的最低8位之外的所有位(将保持原样)。
... 01100100 00000101 & ...00000000 11111111 = 00000000 00000101
为什么是0xff?这在((2的幂)-1)中。全部((2的幂)-1)(例如7255…)其行为类似于%operator。
然后
在二进制中,0是,所有的零,255看起来像这样:
00000000 00000000 00000000 11111111
和-1看起来像这样
11111111 11111111 11111111 11111111
当您执行0xFF和0到255之间的任何值的按位AND时,结果与该值完全相同。如果任何值高于255,结果将在0-255内。
但是,如果您这样做:
-1 & 0xFF
你得到
00000000 00000000 00000000 11111111
,它不等于-1的原始值(11111111
为十进制255)。
多几位操作:(与问题无关)
X >> 1 = X/2
X << 1 = 2X
检查任何特定位是否设置(1)或不(0)然后
int thirdBitTobeChecked = 1 << 2 (...0000100)
int onWhichThisHasTobeTested = 5 (.......101)
int isBitSet = onWhichThisHasTobeTested & thirdBitTobeChecked;
if(isBitSet > 0) {
//Third Bit is set to 1
}
设置(1)特定位
int thirdBitTobeSet = 1 << 2 (...0000100)
int onWhichThisHasTobeSet = 2 (.......010)
onWhichThisHasTobeSet |= thirdBitTobeSet;
重置(0)特定位
int thirdBitTobeReSet = ~(1 << 2) ; //(...1111011)
int onWhichThisHasTobeReSet = 6 ;//(.....000110)
onWhichThisHasTobeReSet &= thirdBitTobeReSet;
异或
请注意,如果执行两次异或运算,结果将是相同的值。
byte toBeEncrypted = 0010 0110
byte salt = 0100 1011
byte encryptedVal = toBeEncrypted ^ salt == 0110 1101
byte decryptedVal = encryptedVal ^ salt == 0010 0110 == toBeEncrypted :)
使用XOR的另一个逻辑是
if A (XOR) B == C (salt)
then C (XOR) B == A
C (XOR) A == B
上面的内容对于交换两个没有临时变量的变量很有用,如下所示
a = a ^ b; b = a ^ b; a = a ^ b;
或
a ^= b ^= a ^= b;
它将result
设置为将value
的8位放入result
的最低8位后得到的(无符号)值。
之所以需要这样做,是因为byte
是Java中的签名类型。如果你只是写:
int result = value;
然后,result
将以值ff ff fe
而不是00fe
结束。另一个微妙之处是
值
被提升为int
(ff ff ff fe
)
(关键是转换到
int
发生在
嗯,不完全是。
问题内容: 我有一个发出异步请求的函数。我如何从中返回响应/结果? 我尝试从回调中返回值,以及将结果分配给函数内部的局部变量并返回该局部变量,但这些方法均未真正返回响应(它们都返回或变量的初始值为任意值) 。 使用jQuery函数的示例: 使用node.js的示例: 使用承诺块的示例: 问题答案: →有关使用不同示例的异步行为的更一般说明,请参见 在函数内部修改变量后 , 为什么变量未更改?-异步
问题内容: 这个问题可能背叛了一个误解,但是我很好奇Python世界的“ Tomcat”是什么。 我所有的Web编程经验都是Java(或Groovy),因此我认为是Java。当我想到制作一个基本的Web应用程序时,我想到了编写一些servlet,构建WAR文件并将其部署在Tomcat或另一个servlet容器中。 在Python中,假设我编写了一些能够响应HTTP请求的代码,我该怎么办?我将如何部
问题内容: 我已经开始阅读有关Valhalla项目的信息,而我确实不了解某些内容,那就是。 这是我的理解: 1)是无法将其作为参考的对象吗? 在 代码示例中,它指出 2)根据Wikipedia, 高效的小型“对象”没有继承 。什么和意味着什么呢? 使用VT无法做到这一点吗? 3)为什么要使用它们?将使用哪种方案以及如何使用。 4)根据,简而言之, 值类型对象是没有身份的对象,即,如果两个值对象的内
这是一个两部分的问题,所有关于的原子性: 1.据我所知,是
我仍然在学习和试验JavaFX中的GUIs,我似乎无法得到我所希望的“外观”…我试图在一个面板中分组几个标签,然后在另一个面板中添加另一个标签。但我似乎不知道如何在JavaFX中正确使用“JPanels”? 如有任何帮助,将不胜感激 编辑:这是我试图通过尝试不同的布局来实现的,但运气仍然不好
在Mac和Windows上,可以使用 <罢工> (替换 )和 (替换 ) (Docker 18.03+)位于容器内。 对于Linux来说,有没有一个可以在不传递env变量或使用各种CLI命令提取它的情况下开箱即用的方法?