C# 如何将-128放入一个sbyte中
我记得我们已经了解到有符号整数类型(sbyte、short、int、long) 第一位表示符号,后7位表示值 我看到sbyte的范围是-128到127,而我认为它一定是-127到127 我尝试了一些代码来理解这是如何可能的,我面临着两件奇怪的事情: 1-我尝试了以下代码:C# 如何将-128放入一个sbyte中,c#,types,sbyte,C#,Types,Sbyte,我记得我们已经了解到有符号整数类型(sbyte、short、int、long) 第一位表示符号,后7位表示值 我看到sbyte的范围是-128到127,而我认为它一定是-127到127 我尝试了一些代码来理解这是如何可能的,我面临着两件奇怪的事情: 1-我尝试了以下代码: sbyte a = -128; Console.Write(Convert.ToString(a, 2)); 结果是 11111亿美元 好像它是一个两字节的变量 2-尝试将范围内的所有数字转换为二进制: for(sbyte
sbyte a = -128;
Console.Write(Convert.ToString(a, 2));
结果是
11111亿美元
好像它是一个两字节的变量
2-尝试将范围内的所有数字转换为二进制:
for(sbyte i=-128;i<=127;i++)
{
Console.WriteLine(Convert.ToString(i, 2));
if(i==127) break;
}
for(sbyte i=-128;i 01111111)
但如果它不适合,那么为什么范围是-128到127
我看到sbyte
的范围是-128
到127
,而我认为它一定是-127
到127
范围确实是[-128,+127]
。范围[-127,+127]
将意味着sbyte
只能表示255
不同的值,而8位构成256
组合
顺便说一句,如果-128
不是合法值,编译器会抱怨
sbyte a = -128;
没有重载Convert.ToString(sbyte-value,int-toBase)
,因此在您的情况下,Convert.ToString(int-value,int-toBase)
被调用,sbyte
被提升为int
要快速检查值,可以将sbyte
打印为十六进制数:
sbyte s = -1;
Console.WriteLine("{0:X}", s); // FF, i.e. 11111111
如果我省略如果(I==127)中断代码>循环继续
当然,sbyte.MaxValue
是127
,所以i
我看到sbyte
的范围是-128
到127
,而我认为它一定是-127
到127
范围确实是[-128,+127]
。范围[-127,+127]
将意味着sbyte
只能表示255
不同的值,而8位构成256
组合
顺便说一句,如果-128
不是合法值,编译器会抱怨
sbyte a = -128;
没有重载Convert.ToString(sbyte-value,int-toBase)
,因此在您的情况下,Convert.ToString(int-value,int-toBase)
被调用,sbyte
被提升为int
要快速检查值,可以将sbyte
打印为十六进制数:
sbyte s = -1;
Console.WriteLine("{0:X}", s); // FF, i.e. 11111111
如果我省略如果(I==127)中断代码>循环继续
当然,sbyte.MaxValue
是127
,因此iI无法为post找到合适的标题有符号整数类型不是“符号大小”类型。它们使用“2的赞美”表示,符号字节的范围为-128到127。您在“16位结果”中错误计算了1和0的数量。实际值有9个1,7个0,但你在问题中输入了8个1,8个0。@Aziz非常感谢。这真的很有趣,我找不到一个合适的帖子标题,有符号整数类型不是“符号大小”类型。它们使用“2的赞美”表示,符号字节的范围为-128到127。您在“16位结果”中错误计算了1和0的数量。实际值有9个1,7个0,但你在问题中输入了8个1,8个0。@Aziz非常感谢。这真的很有趣,我知道-128是一个合法值,我想知道它的二进制值是什么。Aziz的链接解释了这一点。你的代码解决了我的另一个问题,那就是获取奇怪的值11111110000000
@AshkanMobayenKhiabani你可以打印成十六进制,我更新了帖子。我知道-128是一个合法值,我想知道它的二进制值是什么。Aziz的链接解释了这一点你的代码解决了我的另一个问题,那就是得到奇怪的11111110000000
@ashkanmobayenkhaiabani你可以打印成十六进制,我更新了帖子。