問題タブ [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 バイトの整数の交換

int x、int n、および int m の 3 つのパラメーターを受け取るメソッドがあります。x の n 番目と m 番目のバイトを入れ替えた int を返します。

x は通常の整数で、任意の値に設定されます。n と m は 0 から 3 までの整数です。

たとえば、x の 16 進表現を 0x12345678、n を 0、m を 2 とします。最後のバイトと最後から 3 番目のバイトが入れ替わることになっています (n = 78、m = 34)。

x から n 番目と m 番目のバイトを抽出する方法はわかりましたが、メソッドが返すはずの整数に 4 バイトすべてを再結合する方法がわかりません。

これが私の現在のコードです: `

`

追加の制約がいくつかあります。次のもののみが許可されます。

~ & ^ | ! + << >>

(これは no - * /、 loops 、ifs などを意味します。ただし、追加の変数を初期化することはでき、追加はまだ OK です。)

私のコードは n 番目と m 番目のバイトを抽出できますが、ifs を使用せずにすべてを再結合する方法がわかりません。

0 投票する
3 に答える
181 参照

java - Java ビット符号なしシフト (>>>) が奇妙な結果をもたらす

私はこのコードを持っています:

しかし、私はそれがどのように機能するのか理解できません。unsigned へのシフト255(11111111)は私に与えるべきだと思います127(0111111)が、そうではありません。私の仮定は間違っていますか?

0 投票する
2 に答える
1992 参照

c++ - 2 つのニブルを 1 バイトにパックする最速の方法

2 バイトを 1 つにパックする最速の方法は何でしょうか? 大きなバイト配列があります。各バイトは、15 (4 ビット数) 以下の数値を表します。そのため、最初のバイトを上位ニブルに配置し、後のバイトを下位ニブルに配置して、2 バイトを 1 つにパックすることができます。

私の現在のアプローチは、元のサイズの半分の 2 番目の配列を作成し、それをシフトして元の配列を反復処理することです。ニブルを取得します。これは機能しますが、配列のサイズによっては時間がかかります。配列は、数千から数百万のエントリです。壊滅的ではありませんが、最適化は役に立ちます

0 投票する
3 に答える
87 参照

c - バイトからビットを取得する

ねえ、誰かがこれがどのように機能するかを説明できるかどうか疑問に思っていました.バイトから3番目のビットを取得する必要があります.これはブール値です.これが実際にどのように機能するかについて混乱しています. . 私はこれを行う方法の非常に多くの異なる例に来続けています. これは私が持っているものです:

私が思うに、これは apdu_parse[0] の 3 番目のビットを探して、1 か 0 かを判断し、それに応じて格納します。私が言ったように、私は非常に多くの異なる例に出くわし続けているので、それらをブレンドし始めていると思いますが、何も機能していません. apdu_parse[0] の値は 16 進数値です。意味をなさない「93」を取得し続けます。

0 投票する
5 に答える
1615 参照

java - 前もって最後の1を知らずに、Javaバイトのハイエンドビットを「1」で埋める方法は? (FAST FIX 負の整数デコーダ)

以下に説明するように、負の数の FIX/FAST デコーダーを作成しています。

ここに画像の説明を入力

私の質問は:

上記のように、Javaバイトのハイエンドビットを1で埋める方法は? 私はおそらく、この変換で必要なビット操作の魔法に気づいていません。

したがって、01000110 00111010 01011101 から 11110001 10011101 01011101 に移動する必要があります。

7 だけシフトして 8 番目のビットを削除する方法を知っています。私が知らないのは、ハイエンド ビットを 1 で埋める方法です。

0 投票する
0 に答える
616 参照

java - バイナリ文字列 (またはバイト) から一連のビットを抽出する

バイナリ文字列に変換した後、さまざまな部分を抽出する必要がある 16 進文字列 (56 ビットまたは 112 ビット) がたくさんあります。

私が通常行う方法は、パーツをサブストリング化するか、ビットシフトで運試しをすることですが、Integer.parseInt(binary.substring(...)) の約 20 行を使用する代わりに、何らかの種類を適用したいと思います。それにパターン。

以下の私のもの以外のアイデアは、ちょっとばかげていて遅いです。バイナリ文字列の ab、cd、xy 部分を抽出する方法は? ビットシフトを適用する必要があると思いますが、それには複数の行が必要です。私は数行で問題ありませんが、20 までの部分文字列の呼び出しは本当に嫌いです。

これが私の試みです。

出力:

どんなアイデアでも大歓迎です

0 投票する
1 に答える
386 参照

c# - C# を使用した R バイト配列

byte[]特定の量だけ全体を Ror する方法はありますか? 私はすでにいくつかの調査を行っており、Rol a の解決策を見つけましたbyte[]

このコードの作成者は、C# でバイト配列に対して循環ビットシフトを実行する関数はありますか?

同じことを行う方法はありますが、Rol操作の代わりにRor操作を実行できますbyte[]か?