|  | ■No91851 (えん さん) に返信
> VBでもビットシフトを使えるのは分かりますが、
> 不慣れなせいかわかりづらいので、これを使わない方法に書き換えました。
元の C++ コードを C# に置き換えて
 int n = 32768;
 int m, mq;
 for (m = n; (mq = m >> 2) >= 1; m = mq)
 {
   Console.WriteLine("m={0,7:N0}, mq={1,7:N0}", m, mq);
 }
として実行してみたところ
 m= 32,768, mq=  8,192
 m=  8,192, mq=  2,048
 m=  2,048, mq=    512
 m=    512, mq=    128
 m=    128, mq=     32
 m=     32, mq=      8
 m=      8, mq=      2
という結果になりました。
また、No91850 の実装なら、元の C++/C# 版と同じ結果が得られました。
一方、御提示頂いた No91848 の意訳実装で
 Dim n = 32768
 Dim m As Integer = n
 For g As Integer = 1 To CInt(Math.Log(n, 4))
  '
  Console.WriteLine("m={0,7:N0} =>", m)
  '
  m = CInt(m / 4)
  Dim mq As Integer = CInt(m / 4)
  '
  Console.WriteLine("m={0,7:N0}, mq={1,7:N0}", m, mq)
  '
 Next g
とした場合、出力結果はこうなりますね。ループ回数が変化しています。
 m= 32,768 => m=  8,192, mq=  2,048
 m=  8,192 => m=  2,048, mq=    512
 m=  2,048 => m=    512, mq=    128
 m=    512 => m=    128, mq=     32
 m=    128 => m=     32, mq=      8
 m=     32 => m=      8, mq=      2
 m=      8 => m=      2, mq=      0
 m=      2 => m=      0, mq=      0
 |