Neulich habe ich in Verilog einen coolen Trick gelernt. Wenn Sie wiederholt etwas tun müssen. Sie könnten ein Schieberegister verwenden, um die Anzahl der Inkrementierungen zu zählen. Verschieben Sie einfach eine 1 von LSB zu MSB, und wenn es die MSB erreicht, sind Sie fertig.Hardware inspirierte Schleife. Unsinn?
In C würde es so etwas wie diese:
for(j=0b1; !(j & (1<<16)); j=j<<1)
{
/*do a thing 16 times*/
}
Ich weiß, es Nutzung wegen der Bit-Breite begrenzt ist, aber es ist keine Beteiligung hinaus, so dass es schnell ist. Also meine Frage: Gibt es eine Verwendung von diesem? Lohnt es sich, in C oder einer anderen Hochsprache zu verwenden?
Vielleicht in eingebetteten Systemen, wo Ressourcen begrenzt sind.
Dank
Was lässt Sie denken, dass die Zugabe langsamer als Verschiebung? Es ist sicherlich nicht auf irgendeiner modernen CPU, nicht einmal eingebetteten Kernen. Noch ist der Bittest. Also ja, Unsinn. –
interessant, aber ich sehe nicht viel CPU-Zyklus hier zu gewinnen. ! –
@HansPassant Ich dachte, ein Addiermechanismus benötigt mehr Ressourcen als das Umstellen einiger Drähte. Und als ich diese Technik auf einem FPGA verwendete, habe ich etwas Bodenfläche gewonnen. Aber dann habe ich 2048 Bit breite Register verwendet. – Stiggo