(Stefanの回答によると、Verilogでこれを行うのではなく、Verilogバージョンに触発されたCバージョンについて質問していると思います。)
多くのアーキテクチャでは、ループ変数の追加が完全に無料であるのにビットシフトが余分な命令を必要とするため、これは実際にはさらに悪いことです。
完全に?
はい。多くのアーキテクチャには、カウンタをデクリメントしてゼロ以外の場合に分岐する単一の命令があるためです。これらの命令は、他の比較分岐命令と同じくらいの時間がかかります。一方、シフトを行う場合は、追加の命令サイクルが必要になります。プラットフォームに「同等と分岐の比較」命令がない場合はさらに悪化します。すべての命令にあるわけではありません。2つの命令で減算してゼロと比較するものもあります。
デクリメント比較分岐命令のないRISCプラットフォームでも、(1つの命令)を単純に減算してゼロ以外の分岐命令を使用できるため、カウントダウンループはおそらく高速ですが、ループではシフトが必要です。 (1つの命令)およびビット単位-および(1つの命令)分岐の前-ゼロの場合。そして、それはあなたがゼロの場合でもブランチを持っていると仮定しています。
さらに、単純なfor (i = 0; i < N; i++)ループの場合、コンパイラーがそれを「カウントダウン0」ループに変換するのは簡単です。それが速い場合は、自分でそのような巧妙さを行う必要はほとんどありません。