Math 在所有位都设置为1的情况下,对一个数字执行二进制和二进制运算有什么意义吗

Math 在所有位都设置为1的情况下,对一个数字执行二进制和二进制运算有什么意义吗,math,binary,Math,Binary,大家好。我已经多次看到这种运算的例子,以至于我开始认为我的二进制算术有问题。执行以下操作是否有意义: byte value = someAnotherByteValue & 0xFF; 我真的不明白这一点,因为它不会改变任何事情。谢谢你的帮助 附言。 我试图在别处和这里搜索信息,但没有成功 编辑: 当然,我假设另一个字节值是8位长,问题是我不明白为什么那么多人(我是指专业人士)在他们的代码中使用这样的东西。例如,有: buffer_ |= (uint)((window_[wi

大家好。我已经多次看到这种运算的例子,以至于我开始认为我的二进制算术有问题。执行以下操作是否有意义:

byte value = someAnotherByteValue & 0xFF;
我真的不明白这一点,因为它不会改变任何事情。谢谢你的帮助

附言。 我试图在别处和这里搜索信息,但没有成功

编辑: 当然,我假设另一个字节值是8位长,问题是我不明白为什么那么多人(我是指专业人士)在他们的代码中使用这样的东西。例如,有:

     buffer_ |= (uint)((window_[windowStart_++] & 0xff |
     (window_[windowStart_++] & 0xff) << 8) << bitsInBuffer_);
buffer_u |=(uint)((window_[windowStart_++]&0xff)|

(窗口启动[WindowsStart++]&0xff)否..这样做没有用。如果您使用的值的重要性超过8位,则上面的语句具有某种意义。否则,它与输入相同。

否..这样做没有用。如果您使用的值的重要性超过8位,则上面的语句具有s有些含义。否则,它与输入相同。

如果
sizeof(someAnotherByteValue)
大于8位,并且您想从someAnotherByteValue中提取最不重要的8位,那么它是有意义的。否则,没有用。

如果
sizeof(someAnotherByteValue)
大于8位,您希望从另一个字节值中提取最不重要的8位,这是有意义的。否则,这没有用。

不,只要处理一个字节就没有意义。如果
value
是长的,那么较低的8位将是另一个字节值的较低8位,并且剩下的将是零


在C++语言中操作符可以被重载,但可能是但不太可能的是,运算符已经被重载了。这将是非常不寻常的和坏的实践。虽然< /P> < P>不,只要你处理一个字节就没有意义。如果<代码>值>代码>是长的,那么低8位将是<代码>的8个低位。值

,其余为零

uint s1 = (uint)(initial & 0xffff);

一种C++语言,其中操作符可以重载,但可能和不太可能的是,运算符已经被重载。这将是非常不寻常的和坏的实践。

uint s1 = (uint)(initial & 0xffff);
这是有道理的,因为
uint
是32位,而0xffff是16位。该行从
initial
中选择16个最低有效位


这一点很重要,因为
uint
是32位,而0xffff是16位。行从
initial

中选择16个最低有效位最有可能的原因是使代码更加自我记录。在您的特定示例中,重要的不是
someAnotherByteValue
的大小,而是事实上,
value
是一个字节。这使得
&
在我所知道的每种语言中都是多余的。但是,举一个需要它的例子,如果这是Java,而
someAnotherByteValue
是一个
byte
,那么
int-value=someAnotherByteValue;
行可以给出完全不同的结果而不是
int-value=someAnotherByteValue&0xff
。这是因为Java的long、int、short和byte类型都是有符号的,并且必须考虑转换和符号扩展的规则


如果您总是使用习惯用法
value=someAnotherByteValue&0xFF
,那么无论变量的类型是什么,您都知道该值正在接收someAnotherByteValue的低8位。

最有可能的原因是使代码更加自我记录。在您的特定示例中,它不是
someAnotherByteV的大小value
这很重要,但事实上,
value
是一个字节。这使得
&
在我所知道的每种语言中都是多余的。但是,举一个需要它的例子,如果这是Java,而
someAnotherByteValue
是一个
字节,那么这行
int value=someAnotherByteValue;
可能会给出与
int value=someAnotherByteValue&0xff
完全不同的结果。这是因为Java的long、int、short和byte类型都是有符号的,并且必须考虑转换和符号扩展的规则

如果您总是使用习惯用法
value=someAnotherByteValue&0xFF
,那么无论变量的类型是什么,您都知道该值正在接收someAnotherByteValue的低8位

编辑:嗯,我想这是不可能的 另一个字节值是8位长, 问题是我不明白为什么会这样 很多人(我指的是专业人士) 在他们的代码中使用这些东西 Jon Skeet的MiscUtil中有一个例子 是:

uint s1=(uint)(首字母和0xffff)

这里的首字母是int

在这种特殊情况下,作者可能试图将int转换为uint。带有0xffff的&with将确保它仍将转换最低的2字节,即使系统不是具有2字节int类型的系统

编辑:嗯,我想这是不可能的 另一个字节值是8位长, 问题是我不明白为什么会这样 很多人(我指的是专业人士) 在他们的代码中使用这些东西 Jon Skeet的MiscUtil中有一个例子 是:

uint s1=(uint)(首字母和0xffff)

这里的首字母是int


在这种特殊情况下,作者可能试图将int转换为uint。带0xffff的&with将确保它仍能转换最低的2字节,即使系统不是一个具有2字节int类型的系统。

为了挑剔,对于机器的字节大小没有任何保证。没有理由在一个非常便携的程序中进行假设架构字节的宽度为8位。根据C标准(例如),在我的内存中,