Esiste un uso legittimo di hack di manipolazione dei bit in linguaggi di livello superiore come Java?
Riesco a vederle utili in programmi a bassa intensità e ad uso intensivo di calcolo sensibili alla velocità, ad es. elaborazione grafica o funzioni crittografiche. Immagino sia per questo che tutte le loro raccolte sono in C. Tuttavia, arrivando a pensarle in termini di design di livello superiore non riesco a pensare a nessun punto in cui vorrei scrivere, ad esempio, quanto segue in un programma Java:
r = y ^ ((x ^ y) & -(x < y));
anziché:
r = (x < y) ? x : y;
La prima linea sembra più un'offuscamento che un miglioramento. E la maggior parte delle applicazioni ha diversi tipi di colli di bottiglia - più comunemente reti o accesso al disco, tanto che qualsiasi potenziale miglioramento ottenuto usando un hack bit a bit è talmente piccolo che è completamente ignorabile.
Questa linea di pensiero è stata provocata da una recente domanda SO in cui a qualcuno è stato chiesto di un hack bit a bit durante intervista.
Sono d'accordo tanto quanto chiunque che è sempre meglio scrivere codice più veloce, ma considerando che diventa molto meno leggibile, specialmente da qualcuno che non ha familiarità con i bit hack, c'è qualche tipo di applicazione in cui è legittimo che valga la pena?
Questa domanda non riguarda in generale gli operatori bit a bit, ma in particolare gli hack bit a bit e, ancora più specificamente, gli hack bit a bit in Java .
Per hack bit a bit intendo una manipolazione che ha un'implementazione banale e / o ovvia, ma che può essere eseguita leggermente più veloce / migliore con qualche intelligente manipolazione bit a bit - che nella maggior parte dei casi lo rende < em> near-illeggibile a qualcuno che non è abituato agli hack bit a bit.
Esistono domande simili: Importanza del pensiero bit a bit e A cosa servono gli operatori di bit? Le risposte a queste domande parlano di manipolazioni di bit in generale , che sì, hanno molte applicazioni chiare e utili; specialmente in altri linguaggi come C. Anche se questo può sembrare simile, la mia domanda era di averli contro usando la tecnica non bit a bit in Java. Nelle altre domande questo non è affatto affrontato.