PSRL(W)の挙動について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kazuoni

PSRL(W)の挙動について

#1

投稿記事 by kazuoni » 16年前

お邪魔します。

今回は、psrl(w)の挙動についてちょっと納得がいかなかったので
質問に来ました。

例えばですが、

0x48b749b64ab54bb4

をpsrlw 8で右論理シフトする(256で割る)と答えは


0x00480049004a004b

となるわけですが、これを
for(i=0;i<8;++i)
psrlw 1

で実行し、各値を見ていくと、添付ファイルのようになりました。
(上は16進数、下は2進数で結果を表記しています)
初めの状態から一回シフトすると自分の考えでは
以下のようになると思いました。

(2バイト単位で改行します)
0100100010110111
0100100110110110
0100101010110101
0100101110110100

0010010001011011
0010010011011011
0010010101011010
0010010111011010

結果を予想と比較してみます。

予想:0010010001011011001001001101101100100101010110100010010111011010
結果:0010010001011111001001001101111000100101010111010010010111011100

これが微妙に違っています。
異なるのは、シフトによって消えていく部分なので、
今回の結果には影響しないのですが、なんだかしっくりきません。
右論理シフトはMSB=0,すべて一つ右にシフトと記憶していますが・・・
動作がPSRL(W)ではちょっと違うのでしょうか?

よろしくお願いします。

Justy

Re:PSRL(W)の挙動について

#2

投稿記事 by Justy » 16年前


>これが微妙に違っています

 最初の値 48B749B64AB54BB4を1回 psrlwで 1ソフトした値は
「予想」の 245B24DB255A25DAで合ってますよ。
[color=#d0d0ff" face="monospace]
48B749B64AB54BB4: 0100100010110111 0100100110110110 0100101010110101 0100101110110100
245B24DB255A25DA: 0010010001011011 0010010011011011 0010010101011010 0010010111011010
[/color]




>各値を見ていくと、添付ファイルのようになりました

 従って、「添付ファイル」の計算が何かおかしいと思われます。

[color=#d0d0ff" face="monospace]
1回目
 245F24DE255D25DC
->245B24DB255A25DA ?

2回目
 122F126F12AE12EE
->122D126D12AD12ED ?

3回目
 0917093709570977
->0916093609560976 ?

4回目
 048B049B04AB04BB
->048B049B04AB04BB ○

5回目
 0245024D0255025D
->0245024D0255025D ○

6回目
 01220126012A012E
->01220126012A012E ○

7回目
 0091009300950097
->0091009300950097 ○

8回目
 00480049004A004B
->00480049004A004B ○
[/color]

 上が添付の txtにあった値、下が実際の値です。
 1~3回目がおかしいようですね……。

kazuoni

Re:PSRL(W)の挙動について

#3

投稿記事 by kazuoni » 16年前

Justyさん、ご回答ありがとうございます!

違う値で今試したところ・・・バッチシできてました^^;
・・・すみません。。どこでミスしたか分からないですorz

無駄な時間を浪費させてしまい、大変申し訳ありませんでした。


とりあえず、挙動は自分の予想していた通り
(っというか当たり前でした・・・)
ということで解決にさせていただきます。

次回もよろしくお願いします。

#なんであんな結果を得たんだろうか・・・

sizuma

Re:PSRL(W)の挙動について

#4

投稿記事 by sizuma » 16年前

全然関係ないことですが失礼します。

>無駄な時間を浪費させてしまい
貴重な時間を、ではないでしょうか。
なんかすごい違和感があったんで・・・

どうでもいいことにつっこんで、申し訳ないです^^;
まぁスルーしてくださいー

閉鎖

“C言語何でも質問掲示板” へ戻る