Lingue come Java e C# hanno entrambi operatori bit a bit e logici.Perché esiste una distinzione tra operatori logici e bit a bit in Java e C#?
Gli operatori logici hanno senso solo con gli operandi booleani, gli operatori bit a bit funzionano anche con tipi interi. Dato che C non ha un tipo booleano e considera tutti gli interi non nulli come veri, l'esistenza di entrambi gli operatori logici e bit a bit ha senso lì. Tuttavia, linguaggi come Java o C# hanno un tipo booleano in modo che il compilatore possa utilizzare automaticamente il giusto tipo di operatori, a seconda del contesto del tipo.
Quindi, c'è qualche ragione concreta per avere operatori logici e bit a bit in quelle lingue? O erano appena inclusi per motivi di familiarità?
(Sono consapevole del fatto che è possibile utilizzare gli operatori "bitwise" in un contesto booleano per aggirare il cortocircuito in Java e C#, ma non ho mai avuto bisogno di un simile comportamento, quindi suppongo che potrebbe essere in gran parte inutilizzato caso speciale)
Vedere ad esempio: http://stackoverflow.com/questions/11411907/what-are-the-cases-in-which-it-is-better-to-use-unconditional-and-instead-of – assylias