変数a
の左ビットワイドローテーションをC++でのキャリーなしに行う作業をしましょう。私は、このルーチンを実行するためにアセンブリをインラインで使用するほうがはるかに良いと思いますか?キャリーなしで変数にビット単位の回転を残しましたか?
たとえば、a == 100 == 0b<a bunch of zeros>1100100
の場合、a LR 1
は0b1001001 == 73
(つまり、0b11001000 == 200
ではない)を指定する必要があります。
したがって、質問はです:上記の作業に合わせて以下のコードをどのように書き換えるべきですか?
#include <stdio.h>
int main()
{
long long a = 0;
scanf("%ld", &a);
// Here the left-shifting should be replaced with left-rotating
printf("%ld\n", a << 1);
return 0;
}
ほぼ確実にそれほど良くないでしょう。 'a << 1'はあなたが書くことができる全く同じアセンブリにマップされます(または、少なくとも同等のアセンブリ - 例えばレジスタが異なるかもしれません)。 –
どこに持ち越したいですか?あなたのサンプルはちょうど長い長いです。それが意味するものなら、<< 1は自動的にMSWに引き継がれます – sehe
私は既存のシフトが持ち運びではないと思いましたか? – Puppy