80

在我讀過的各種文章中,有時會提到基本數據類型,有時還會引用標量。標量與原始數據類型 - 它們是相同的東西嗎?

我的每一個的理解是,他們的數據類型的一些簡單的像一個int,布爾,焦炭等

有我丟失的東西,這意味着你應該使用特定的術語或者條款簡單的互換? 每個維基百科頁面都沒有顯示任何明顯的內容。

如果條款是簡單的可互換的,哪一個是首選的?

回答

118

我不認爲它們是可以互換的。它們通常是相似的,但差別確實存在,似乎主要在於它們與上下文中的對比和相關性。

標量通常對比與化合物,如陣列,地圖,套,結構等標量是一個「單個」值 - 整數,布爾值,或許一個字符串 - 而化合物由的多個標量(可能引用其他化合物)。 「標量」用於單個/簡單/原子值和複合值之間的相關區別的上下文中。

然而,原始類型與例如引用類型,當相關區別是「這是否直接是一個值,或者它是否包含真實值的引用?」時使用,如在Java的基本類型與引用中一樣。我認爲這是一種比標量/複合更低層次的區別,但並不完全。

它確實取決於上下文(並且經常討論哪種語言族)。採取一個,可能是病態的,例如:字符串。在C中,一個字符串是一個化合物(一個字符數組),而在Perl中,一個字符串是一個標量。在Java中,字符串是一個對象(或引用類型)。在Python中,一切(概念上)都是對象/引用類型,包括字符串(和數字)。

+0

在討論引用類型和基本類型時也要考慮「值」類型。關於標量和原語的等價性,它取決於語言。例如,根據PHP手冊,其基本類型中只有一半是標量:http://php.net/manual/en/language.types.intro.php –

6

簡而言之,看起來'標量'類型是指單個項目,而不是複合或集合。所以標量既包含原始值也包含枚舉值之類的東西。

http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html

也許「標量」一詞可以是倒退到C:

其中標量是含有一個單一的值,並且不構成其他C的原始對象++對象

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf

我很好奇這是否指這些我是否tems會有'scale'的價值嗎? - 如計數。

+0

我曾受教(很久以前在學校)該術語來源於「標量處理器」,而不是「矢量處理器」。標量處理器是一種只能處理一個數據的CPU。這些處理器以算術術語命名。有趣的是,當你在維基百科上查找'標量'時,你會被重定向到'變量'。 – Evert

3

我喜歡Scott Langeberg的回答,因爲它很簡潔,並由權威鏈接支持。如果可以的話,我會選舉斯科特的答案。

我想「原始」數據類型可以被認爲是主要的數據類型,所以輔助數據類型是從主要數據類型派生。派生是通過組合,如C++結構。結構可以用來組合數據類型(如int和char)以獲得輔助數據類型。結構定義的數據類型始終是輔助數據類型。主要數據類型不是從任何東西派生的,而是它們在編程語言中給出的。

我有一個平行於原語是主要術語的意思。這個並行是「正則表達式」。我認爲術語「正規」可以理解爲「規範」。因此你有一個表達式來調節搜索。

標量詞源(http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none)表示階梯狀。我認爲這與編程相關的方式是梯子只有一個維度:梯子末端有多少梯級。標量數據類型只有一個維度,因此用單個值表示。

我覺得在使用中,原語和標量是可以互換的。有沒有一個不是標量的,或者是一個不是原始的標量的例子?

雖然可以互換,但是基元是指數據類型是其他數據類型的基本構建塊,並且基元不是由其他數據類型組成的。

標量指其具有單一值。標量與數學向量形成對比。一個向量不是用單個值表示的,因爲(使用一種向量作爲例子)需要一個值來表示向量的方向,而另一個值需要表示向量的大小。

參考鏈接: http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type

7

有很多這些術語的混淆和誤用的。通常一個人用來表示另一個人。以下是這些術語實際上的含義。

「原生」指的是內置於語言中的類型,而不是由庫(甚至是標準庫)提供,而不管它們是如何實現的。 Perl字符串是Perl語言的一部分,所以它們在Perl中是本地的。 C使用庫提供字符串語義到指向字符的指針,所以指向char的指針是本地的,但字符串不是。

「原子」是指不能再分解的類型。這與「複合」相反。複合材料可以分解爲原子值或其他複合材料的組合。本機整數和浮點數是原子的。分數,複數,容器/集合和字符串是複合的。

「標量」 - 這是混淆了大多數人的一個 - 是指可以表示比例尺度(因此名稱)的值,如大小,體積,計數等。整數,浮點數,分數是標量。複數,布爾值和字符串是不是標量。原子的東西不一定是標量,而標量的東西不一定是原子的。標量可以是本地的或由圖書館提供。

某些類型有奇怪的分類。 BigNumber類型通常以數字或整數數組的形式實現,它們是標量,但它們在技術上不是原子的。如果實現處於隱藏狀態,並且您無法訪問內部組件,它們可能會顯示爲原子。但是組件只是隱藏的,所以原子性是一種幻覺。它們幾乎總是在圖書館提供,所以它們不是本地的,但它們可能是。例如,在Mathematica編程語言中,大數字是本地數據,因爲Mathematica程序無法將它們分解爲構建塊,所以它們在該上下文中也是原子的,儘管它們是在涵蓋(你不再處於Mathematica語言的世界)。

這些定義與所使用的語言無關。

+1

雖然這種標量類型的定義對我來說最有意義,但這似乎並不是最常用的定義。 – lleaff

0

在C中,枚舉類型,字符以及各種整數表示形成一個更通用的稱爲標量類型的類型類。因此,您可以對任何標量類型的值執行的操作與整數相同。

相關問題