问题标签 [byte-shifting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
14547 浏览

c - 交换 2 个字节的整数

我有一个接收 3 个参数的方法:int x、int n 和 int m。它返回一个交换了 x 的第 n 个和第 m 个字节的 int

x 只是一个普通整数,设置为任何值。n 和 m 是 0 到 3 之间的整数。

例如,设 x 的十六进制表示为 0x12345678,n 为 0,m 为 2。最后一个和倒数第三个字节应该是交换的(n = 78,m = 34)。

我已经弄清楚如何从 x 中提取第 n 个和第 m 个字节,但我不知道如何将所有 4 个字节重新组合成该方法应该返回的整数。

这是我当前的代码:`

`

还有一些额外的限制 - 只允许以下内容:

~ & ^ | ! + << >>

(这意味着没有- * /,循环,ifs等。但是,可以初始化其他变量并且添加仍然可以。)

我的代码可以提取第 n 个和第 m 个字节,但我不知道如何在不使用 ifs 的情况下重组所有内容。

0 投票
1 回答
4886 浏览

assembly - MIPS - 将寄存器值移位一个数值

谁可以给我解释一下这个?问题是:

目标是在操作后找到 $t2 的值。初始值为:

我了解“sll $t2, $t0, 44”的伪代码翻译是:

并且 t0 和 t2 的二进制表示是:

但是如何移动 44 位呢?我认为一个值开始时只有 32 位。如何通过将 $t0 移动 44 位来找到 $t2 的值?

0 投票
3 回答
181 浏览

java - Java bit unsigned shifting (>>>) give strange result

I have this code:

But I can't understand how it works. I think that unsigned shifting to 255(11111111) should give me 127(0111111) but it doesn't. Is my assumption wrong?

0 投票
5 回答
19362 浏览

python - 使用python读取十六进制文件中的多个字节

我有一个十六进制文件,如下所示:-

我想读取第 3 和第 4 个字节。交换这两个字节并将它们保存在一个变量中。例如,我想在变量“num”中保存 0xFF11(字节交换后)

这就是我尝试过的:我一个一个地读取这两个字节

现在的问题是 num 变量具有整数值,我不知道如何将十六进制放入其中。我被困在这里,无法继续前进。欢迎任何帮助。

PS:我对python很陌生。

0 投票
2 回答
1992 浏览

c++ - 将两个半字节打包成一个字节的最快方法

将两个字节打包成一个的最快方法是什么?我有大量的字节。每个字节代表一个不大于 15 的数字(4 位数字)。因此,我可以将两个字节打包成一个字节,将第一个字节放入高半字节,然后将后半字节放入低半字节。

我目前的方法是创建一个原始数组一半大小的第二个数组,然后迭代原始数组并移动它和 | 得到小食。这可行,但是需要一段时间,具体取决于数组的大小。数组从几千个条目到几百万个。这不是灾难性的,但任何优化都会有所帮助

0 投票
3 回答
87 浏览

c - 从字节中检索位

嘿,所以我想知道是否有人可以解释它是如何工作的,我必须从一个字节中检索第三位,它是一个布尔值,我对它的实际工作原理感到困惑,以及我的语法是否正确. 我不断提出很多不同的例子来说明如何做到这一点。这就是我所拥有的:

我认为这样做是寻找 apdu_parse[0] 的第三位确定它是 1 还是 0 并相应地存储它。正如我所说,我不断遇到很多不同的例子,我认为我开始将它们混合起来,但没有任何效果。apdu_parse[0] 中的值是一个十六进制值,我不断得到'93',这没有任何意义。

0 投票
5 回答
1615 浏览

java - How to fill high-end bits in a Java byte with '1' without knowing the last 1 in advance? (FAST FIX Negative Integer decoder)

I am writing a FIX/FAST decoder for negative numbers as described below:

enter image description here

My question is:

How to fill the high-end bits of a Java byte with 1s as it is described above? I am probably unaware of some bit manipulation magic I need to in this conversion.

So I need to go from 01000110 00111010 01011101 to 11110001 10011101 01011101.

I know how to shift by 7 to drop the 8th bit. What I don't know is how to fill the high-end bits with 1s.

0 投票
1 回答
89 浏览

c++ - 位移有符号整数

我正在位移一个符号整数第一个字节是指数接下来的 4 是尾数。这似乎并不总是有效,我相信这是因为将其称为字符,但是当我将其设为有符号或无符号字符时,它仍然不是 100%。有任何想法吗?

0 投票
0 回答
616 浏览

java - Extracting a sequence of bits from a binary string (or byte)

I have a whole bunch of hex strings (56 bits or 112 bits), which I need to extract different parts from, after converting to a binary string.

How I would normally do it is either substring the parts, or try my luck with bit shifting, but instead of having ~20 lines of Integer.parseInt(binary.substring(...)), I would like to apply some kind of pattern to it.

Any ideas, other than mine below, which is kind of stupid and slow; how to extract a-b, c-d, x-y parts of a binary string? I guess one would need to apply bit shifting, but that would also take multiple lines. I'm fine with a couple of lines, but I really dislike the ~20 substring calls.

Here's my attempt at something like this.

Output:

Any ideas are greatly appreciated

0 投票
1 回答
386 浏览

c# - 使用 C# 的 Ror 字节数组

有没有办法以byte[]特定的数量对整体进行 Ror?我已经做了一些研究并找到了 Rol a 的解决方案byte[]

可以在此处找到此代码的作者:C# 中是否有一个函数可以为字节数组执行循环移位?

知道我怎么能做同样的事情,但在 a 上执行 Ror 操作而不是 Rol 操作byte[]