查看C#数字数据类型,我注意到大多数类型都有签名和未签名的版本。我注意到,虽然“默认”整数,short和long都是有符号的,并且将它们的未签名对应物作为uint,ushort和ulong; “默认”字节是无符号的 - 并且在sbyte中有一个带符号的对应字符。
出于好奇,为什么字节与其他字节如此不同?这背后是否有一个特定的原因,或者“只是事情的方式”?
希望问题不会因为我的措词和过多使用引号而过于混乱。嘿..
答案 0 :(得分:7)
我想说一个字节不被认为是数字类型,而是定义了一个大小为8位的结构。除了没有带符号的字节概念,它是无符号的。另一方面的数字首先被认为是签名的,因此声明它们是无符号的,这是不常见的保证前缀
[编辑] 忘了有一个有符号的字节(sbyte)。我想这是历史和实际的应用。 Int比UI更常见,字节比sbyte更常见。
答案 1 :(得分:3)
历史上,术语字节,半字节和位表示存储单元,助记符或代码......不是数值。拥有负兆字节的内存或添加ASCII代码1和2期待代码3是有点傻。在许多方面,没有签名的“字节”这样的东西。有时“事物”和“价值”之间的界限非常模糊......就像大多数将字节视为事物和价值的语言一样。
答案 2 :(得分:1)
这真的只是直觉而不是一致。如果.NET Framework使用System.UInt8
和System.Int8
与其他整数类型保持一致,那么它可能会更清晰。但是,它似乎有点武断。
对于MSIL(所有.NET语言无论如何编译)的价值更加一致,sbyte
被称为int8
而byte
被称为{{1} },unsigned int8
称为short
等。
但是术语字节通常不用于描述数字类型,而是用于处理文件,序列化,套接字等的一组8位。例如,如果Stream.Read使用System.Int8 []数组,这将是一个非常不寻常的API。
答案 3 :(得分:1)
更严重的条款腐败程度。一个字节本身并不是任何形式的数字,它只是一个存储单元。
但是,字节,字符和8位有符号/无符号整数的名称可以互换使用,它们可能不应该有: