gpt4 book ai didi

java - 在保留其余部分的同时翻转一个字节中的一位的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 22:52:34 24 4
gpt4 key购买 nike

[编辑]

我意识到不幸的是我把问题简单化了,答案并没有真正帮助我,所以我重新措辞......

因此,在我的情况下,我有一个传入字节流(示例),其中可能设置的唯一位是第一个 (0000 | 0001)。

所以,假设我得到了一个如下所示的序列:

0000,000**0**,
0000,000**1**,
0000,000**0**,
0000,000**1**,
0000,000**0**,
0000,000**0**,
0000,000**0**,
0000,000**0**

我将相关位设置为粗体,以便更清楚地说明我实际收集的内容。

因此,当这些“位”到达时,我需要将它们分类成如下所示的内容:0000,1010

我这样做是通过移动现有值 >> 1,然后添加移动了 << 7

的传入值
byte aggregateByte = 0;
//loop 8 times as incoming samples arrive...
aggregateByte = (aggregateByte >> 1) + incomingSample << 7

这(*应该)产生正确的结果。

但是因为 java 没有签名/签名的概念,所以每次我移动时,因为我从左侧开始,如果前一个传入位是 1,java 会保留 1,因为它看到这个作为符号位,并且永远不允许它重置回 0。

所以...在添加传入位之前我需要做的是将现有字节中的第一个位翻转为 0,然后传入位将设置为需要设置的任何值。

目前,我通过设置 0x7F 的掩码并将其与字节进行 &ing 来实现这一点。

所以,我的实际添加看起来像这样:((aggregateByte >> 1) & 0x7F ) + incomingSample << 7

0x7F 创建一个如下所示的掩码:0111,111因此,当 I & this 与现有值相对时,它会将最后一位翻转为 0。

我想我的问题是“我是在重新发明轮子吗,有没有更好的方法来处理这个问题,或者这是否可靠,并且是处理这个过程的相对有效的方法?”

最佳答案

|& 都不用于切换位。为此,您需要使用 ^。但是 0x40 确实是翻转第 6 位(用您的话来说是“第 7 位”)的正确值。

关于java - 在保留其余部分的同时翻转一个字节中的一位的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18318153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com