C#数字数据类型命名

时间:2010-09-01 04:26:59

标签: c# naming-conventions types

查看C#数字数据类型,我注意到大多数类型都有签名和未签名的版本。我注意到,虽然“默认”整数,short和long都是有符号的,并且将它们的未签名对应物作为uint,ushort和ulong; “默认”字节是无符号的 - 并且在sbyte中有一个带符号的对应字符。

出于好奇,为什么字节与其他字节如此不同?这背后是否有一个特定的原因,或者“只是事情的方式”?

希望问题不会因为我的措词和过多使用引号而过于混乱。嘿..

4 个答案:

答案 0 :(得分:7)

我想说一个字节不被认为是数字类型,而是定义了一个大小为8位的结构。除了没有带符号的字节概念,它是无符号的。另一方面的数字首先被认为是签名的,因此声明它们是无符号的,这是不常见的保证前缀

[编辑] 忘了有一个有符号的字节(sbyte)。我想这是历史和实际的应用。 Int比UI更常见,字节比sbyte更常见。

答案 1 :(得分:3)

历史上,术语字节,半字节和位表示存储单元,助记符或代码......不是数值。拥有负兆字节的内存或添加ASCII代码1和2期待代码3是有点傻。在许多方面,没有签名的“字节”这样的东西。有时“事物”和“价值”之间的界限非常模糊......就像大多数将字节视为事物和价值的语言一样。

答案 2 :(得分:1)

这真的只是直觉而不是一致。如果.NET Framework使用System.UInt8System.Int8与其他整数类型保持一致,那么它可能会更清晰。但是,它似乎有点武断。

对于MSIL(所有.NET语言无论如何编译)的价值更加一致,sbyte被称为int8byte被称为{{1} },unsigned int8称为short等。

但是术语字节通常不用于描述数字类型,而是用于处理文件,序列化,套接字等的一组8位。例如,如果Stream.Read使用System.Int8 []数组,这将是一个非常不寻常的API。

答案 3 :(得分:1)

更严重的条款腐败程度。一个字节本身并不是任何形式的数字,它只是一个存储单元。

但是,字节,字符和8位有符号/无符号整数的名称可以互换使用,它们可能不应该有:

  • 字节表示8位数据 没有关于数据的格式。
  • 字符表示一些数据 存储单个的表示 文字字符。
  • “UINT8”/“INT8”表示8位 数据,有符号或无符号格式, 存储数字整数值。