ビットをシフトする方法があるかどうか疑問に思っていましたか? 私はそれを正確に探せました。私は自分がしたいことに関係するものは見つけられません。 私は0b01001101という数字を持っていますが、最初に落ちる数字を付け加えて、それを右に2回シフトしたいとします。したがって、0b01010011のようになります。 C++で左または右にビットシフトできる関数はありますか?ビットシフトする場所
答えて
は、ここで(ショートパンツ、文字、int型、および符号なし/似て署名を含む)intのすべてのタイプで動作するはずテンプレート化バージョンです。
template<class T>
T rotate_shift_right(T x, int shift)
{
if ((shift > 0) && (shift < (sizeof(x)*8)))
{
x = ((unsigned)x >> shift) | (x << (sizeof(x) * 8 - shift));
}
return x;
}
template<class T>
T rotate_shift_left(T x, int shift)
{
if ((shift > 0) && (shift < (sizeof(x)*8)))
{
x = (x << shift) | (((unsigned)x) >> (sizeof(x) * 8 - shift));
}
return x;
}
私はそれをシフトし、最後に最後のバイトを最初に合わせることが効果的だと思います。
このQ&Aは一見、そのコースを実行していますが、最後のバイトが間違った操作であることを "anding"として使用する答えを編集する必要があります。 – tinman
いいえ、あなたはあなたのカスタム1
これは真実ですが、最小限ですが、質問に答えます – ShinTakezou
これは本当にコメントであり、質問に対する回答ではありません。著者にフィードバックを残すには、「コメントを追加」を使用してください。 – TemplateRex
@rhalbersmaまあ、もう一度質問を読むと、私の投稿は実際には答えだと思う。たぶん短すぎるかもしれません(2つのダウンボックスがあるのは当然ですが)が正しいです。 – Saphrosit
アセンブリ命令のRORを使用し、キャリーフラグの値の作業を行う必要があるたびに取得を作成する必要があります。
int rotate(int x, int n)
{
for(int i = 0; i < n; i++) {
__asm {
ror x, 1 ; rotate and store limit bit in cf
lahf ; get part of flags in ah
and ah, 1 ; get only the cf
shl eax, 31 ; put it at the end
and x, eax ; and store in x
}
}
return x;
}
これは、ベンダー固有の拡張機能として実装されています。 MSVCの場合は、_rotl8, _rotl16(または右に回転する場合は_rotr*
)を使用できます。 GCCについては不明ですが、いつでもアセンブリに落として、rol
またはror
を使用することができます。
あなた自身を書くと、難しくないと思います。
最初に右の2ビットを格納し、次にビットシフトを行います。最後に、格納されたビットで左の2ビットを埋めます。あなたはrotational shift
を実装したい
私はPythonとC++の両方でそれを実装する必要があるので、私はこれをやると思います。 – Hondros
- 1. ビットシフトがない場合ビットシフト演算子
- 2. JavaScriptビットシフト
- 3. VB.NETでビットシフトするには?
- 4. RPGLEでのビットシフト
- 5. AS3ビットシフト0?
- 6. mysqlのビットシフト
- 7. Cビットシフトの振る舞い
- 8. {2の補数}ビットシフト
- 9. 符号付きビットシフト
- 10. アンドロイドアプリで場所の場所を表示する方法
- 11. スタティックアレイを目的の場所に保存する場所
- 12. 初期化後にテーブルビューをスクロールする場所/場所
- 13. あなたの場所を偽の場所に変更する
- 14. djangoモデルのプロパティタグを使用する場所/場所
- 15. Cビットシフトの奇数の結果が左に15ビットシフトした
- 16. Googleの場所は、場所のID
- 17. 場所または場所のデータベース
- 18. 場所
- 19. 場所
- 20. 場所
- 21. 場所
- 22. リファクタリング - 開始する場所
- 23. FindLib.cmakeをインストールする場所
- 24. ダウンロードする場所h2o 3.10.0.8
- 25. php_SOAP.DLLダウンロードする場所は?
- 26. 使用する場所Userdefualts
- 27. インタラクティブブック - 開始する場所
- 28. ajaxでソートする場所
- 29. CCuredをダウンロードする場所
- 30. instantiateViewControllerWithIdentifier使用する場所
あなたが探している用語「循環シフト」はありますか? http://stackoverflow.com/questions/776508/circular-shift-operations-in-cまた、あなたはその言葉をgoogleすることができます – Yuf
さて、私は自分のことをどうやって作りますか?私はちょうどそれと1と、結果が1なら、右に1シフトし、次にORでそれを255とするか、それともバイナリが大きいか?同様の左シフトの方法? – Hondros
@Yufはい、私はそれがまさに私が探していたものだと思います! :D – Hondros