为什么VB.Net中的负SByte数有16位?

为什么VB.Net中的负SByte数有16位?,vb.net,binary,bit,signed,Vb.net,Binary,Bit,Signed,我之前问过一个关于在If语句中使用“And”比较运算符比较数字的问题,现在我一直在胡思乱想让我的头缠在按位运算符上。所以我写了一个非常基本的代码,可以看到任何十进制数在二进制格式下的转换 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox(ConvertToBinary(-1)) End Sub Pub

我之前问过一个关于在If语句中使用“And”比较运算符比较数字的问题,现在我一直在胡思乱想让我的头缠在按位运算符上。所以我写了一个非常基本的代码,可以看到任何十进制数在二进制格式下的转换

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    MsgBox(ConvertToBinary(-1))
End Sub

Public Function ConvertToBinary(ByVal someInteger As SByte) As String
    Dim converted As String = Convert.ToString(someInteger, 2) '.PadLeft(8, "a"c)
    Return converted
End Function

注意这里我使用SByte作为参数-它应该只包含8位,对吗?但是,出现的消息框有16位分配给负数。正数具有正确的8。

没有
转换。ToString
重载会占用
SByte
,因此
SByte
被隐式转换为
Short

我相信有吗?我可以看到它可能会转换它,但是Intellisense说ToString方法有一个Sbyte参数@Adam这是一个完全不同的重载,它需要一个
IFormatProvider
作为第二个参数,而不是一个整数基。