看看C#數字數據類型,我注意到大多數類型都有簽名和未簽名版本。我注意到,雖然短的和長的「默認」整數都被簽名,並且它們的未簽名的對應物爲uint,ushort和ulong; 「默認」字節是未簽名的 - 並且以sbyte爲單位簽名。C#數字數據類型命名
出於好奇,爲什麼字節和其餘的不一樣?這背後有一個特定的原因,還是「事情就是這樣」?
希望這個問題不是太混亂,因爲我的措辭和過度使用引號。嗯..
看看C#數字數據類型,我注意到大多數類型都有簽名和未簽名版本。我注意到,雖然短的和長的「默認」整數都被簽名,並且它們的未簽名的對應物爲uint,ushort和ulong; 「默認」字節是未簽名的 - 並且以sbyte爲單位簽名。C#數字數據類型命名
出於好奇,爲什麼字節和其餘的不一樣?這背後有一個特定的原因,還是「事情就是這樣」?
希望這個問題不是太混亂,因爲我的措辭和過度使用引號。嗯..
我會說一個字節不被視爲數值類型,但定義了一個8位大小的結構。此外沒有簽名的字節概念,它是無符號的。另一手上的號碼首先被認爲是有符號的,所以表明它們是無符號的,這是不常見的前綴
[編輯] 忘記有一個有符號的字節(sbyte)。我認爲這是相當歷史和實際的應用。 Ints比UInts更常見,字節比sbyte更常見。
這實際上只是歸結爲直觀而不一致。如果.NET Framework使用System.UInt8
和System.Int8
與其他整數類型保持一致,則可能會更清晰。但是,它似乎有點武斷。
對於什麼是值得MSIL(所有.NET語言編譯成無論如何)是一個sbyte
更一致稱爲int8
和byte
被稱爲unsigned int8
,short
被稱爲int16
等
但術語字節通常不用於描述數字類型,而是用於處理文件,序列化,套接字等8位數據集。例如,如果Stream.Read與System.Int8 []數組一起工作,那會是一個非常不尋常的外觀API。
你的意思是在你的第一段中有'ubyte'嗎? 'byte'和'sbyte' *是* C#所附帶的內容。 – 2010-09-01 05:33:49
我想它沒有出來,但我的意思是說我喜歡C#使用字節和sbyte,因爲它確實如此,但爲了保持一致性,感覺它們應該分別映射到System.UInt8和System.Int8。 – Josh 2010-09-01 05:56:12
歷史上術語字節,半字節和位表示存儲單元,助記符或代碼...不是數字值。負兆字節的內存或添加ASCII代碼1和2期待代碼3有點傻。在許多方面,沒有像簽名的「字節」那樣的東西。有時候,「事物」和「價值」之間的界限非常模糊......與大多數將字節視爲事物和價值的語言一樣。
這更多的是條款的腐敗程度。一個字節在任何形式上都不是固有的數字,它只是一個存儲單元。
然而,字節,字符和8位有符號/無符號整數不得不使用他們的名字互換,他們可能不應該有:
我猜這是沒有多大意義的有一個簽名的'字節',而實際的數字類型('int','short','long')應該默認簽名。 – NullUserException 2010-09-01 04:32:20
在C中,「char」是8位數據類型。而且,將「unsigned char」類型定義爲「字節」並不罕見。在C#中,字節或多或少需要克服缺少真正的數字8位字符。 Java採用「字節」作爲標準,C#遵循套件。 – tidwall 2010-09-01 05:21:14