当前位置: 首页 > 知识库问答 >
问题:

有什么价值

仉峻
2023-03-14

我有以下Java代码:

byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;

打印出来的结果是254,但是我不知道这个代码是如何工作的。如果


共有3个答案

顾乐心
2023-03-14

它有助于减少大量的代码。它偶尔用于由8位组成的RGB值。

其中0xff表示24(0)和8(1),如00000000 00000000 00000000 11111111

它有效地掩蔽了变量,因此它只留下最后8位中的值,并忽略所有其余的位

在尝试将颜色值从特殊格式转换为标准RGB值(8位长)的情况下最常见。

很好的解释,请看这里

池恩
2023-03-14

从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;
龙涵蓄
2023-03-14

它将result设置为将value的8位放入result的最低8位后得到的(无符号)值。

之所以需要这样做,是因为byte是Java中的签名类型。如果你只是写:

int result = value;

然后,result将以值ff ff fe而不是00fe结束。另一个微妙之处是

  1. 被提升为intff 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命令提取它的情况下开箱即用的方法?