Dlaczego odlewanie boolean
do byte
w .NET daje następujące wyniki?Konwersja wartości Boolean na Byte w VB.NET
kod Snippit:
Dim x As Boolean = 1
Dim y As Byte = x 'Implicit conversion here from Boolean to Byte
System.Diagnostics.Debug.Print(_
"x = " & x.ToString _
& " y = " & y.ToString _
& " (bool)(1) = " & CType(1, Boolean).ToString _
& " (byte)((bool)1) = " & CType((CType(1, Boolean)), Byte).ToString)
wyjściowa:
x = True
Y = 255
(bool) (1) = True
(bajtów) ((Bool) 1) = 255
Dlaczego True
(w hich zwykle jest określany jako liczba całkowita reprezentująca 1) konwersji do 255 po odlaniu do byte
?
Ciekawe, że VB.NET umożliwia nawet rzutowanie logiki Boolean na bajt. W języku C# to nielegalna obsada. – vcsjones
Jeśli zrobisz 'DirectCast()' w VB.NET automatycznie powie Ci, że jest to nielegalna obsada, ale jeśli użyjesz 'CType()' (co pokazałem), zrobi to jak wyżej. Chciałbym wiedzieć, jak "True", który jest powszechnie znany jako "1", przekłada się na "255" pod maską. Mnóstwo tutaj dziwnych castingów. – afuzzyllama
Myślę, że to tylko zachowanie kompilatora. Emituje IL 'ldc.i4 FF 00 00 00', ale nie widzę niczego w specyfikacji, która mówi dlaczego. W bardzo prostych przypadkach kompilator właśnie optymalizuje odlew. – vcsjones