2012-07-26 30 views
4

剛纔我讀到「char是Java中唯一的無符號整型原語類型」。 這是否意味着char是Java中不可或缺的類型之一?字符類型可以分類爲整數嗎?

和C一樣,最近我已經讀過C類型包括標量類型,函數類型,聯合類型,聚合類型和標量類型包括指針類型和算術類型,然後算術類型包括整型和浮點型,整型包括枚舉類型和字符類型。

在Java和C中,字符類型是否真的可以歸類爲整數?

+0

'char'在Java被定義爲一個UTF-16字符,這意味着它是一個2字節值0某處和65535之間的這種可以容易地解釋作爲一個整數(數學概念,而不是'int')。 c中的「char」被定義爲0到255之間的1個字節字符。 – 2012-07-26 14:52:43

+0

@HansZ儘管'CHAR_BIT == 8'是最常見的,但C標準允許更大的值。甚至還有一些32位'char',iirc的實現。 – 2012-07-26 15:18:56

+0

@DanielFischer ANSI C標準(C99)$ 2.2.4.2:對最小對象的比特 *最大數不是一個位字段(字節) CHAR_BIT 8 用於類型的對象*最小值符號字符 SCHAR_MIN符號字符 SCHAR_MAX 127 *最大值爲unsigned char類型的對象類型的對象-127 *最大值 UCHAR_MAX 255 – 2012-07-26 15:26:14

回答

6

是的,一個char是它出現的所有流行語言中的一個整體類型。 「積分」意味着它的頻譜是離散的,任何兩個不同值之間的最小差值是1。與其他整數類型相比,支持值的所需範圍通常很小。計算機硬件傳統上將整數視爲基本數據類型;相比之下,算術浮點類型是更新和更復雜的加法。

+0

或者,如果類型「T」的對象的值是整數,則類型「T」是整數類型。 – ouah 2012-07-26 15:17:49

+0

@ouah:嗯。是一個整數嗎? :-) – 2012-07-26 15:51:09

+0

@KerrekSB在C中,它甚至是一個'int'。 – 2012-07-26 15:56:52

1

我不能確定的整體式的正式定義,但簡而言之,是的,char是在Java中不可或缺的類型,因爲它可以被看作是代表一個整數。

例如你可以做

char c1 = 'a' + 'b'; 

char c2 = 5; 

char c3 = c2 + 3; 

int i = c3; 
char c4 = (char) i; 

等。

1

在記憶中,基本上所有東西都是完整的......但是。 char是C,C++和Java中的整數類型。

2

根據Java Primitive Data Types教程:

:char數據類型是單16位的Unicode字符。它的最小值爲'\ u0000'(或0),最大值爲'\ uffff'(或65,535)。

所以是的,它是一個16位無符號整數。無論您是使用類型來表示一個數字或字符是由你...


也請記住,雖然 char類型是保證在Java中的16位,唯一的限制Ç規定是,類型必須至少爲8位。根據從 this answer的C時的參數參考:

這不是一個位字段(字節)

CHAR_BIT爲最小的對象的比特

最大數目8

所以在C char確實不一定表示與Java中的char相同的整數值範圍。

0

C規範要求將char類型實現爲1字節整數。其他類型的規格並不總是如此清晰。例如,原來的Kernigan和Ritchie本C語言書中說,只要而言,不同的實現中,你只能依靠事實是不超過

+0

java中的char是UTF-16,這意味着它是一個雙字節字符。 c中的'char'被定義爲'sizeof(char)'總是產生1,這意味着它必然是1個字節的值。 – 2012-07-26 14:54:37

+0

UTF-16在一個字節爲8位的機器上只有兩個字節。字節取決於體系結構。 – noisesmith 2013-09-14 17:46:21

3

到@ aioobe的回答類似

int n = 5; 
char ch = (char) '0' + 5; // '5' 

或反向

char ch = '9'; 
int i = ch - '0'; // 9 

或不尋常的

char ch = 'a'; 
ch += 1; // 'b'; 

或奇

char ch = '0'; 
ch *= 1.1; // '4' as (char) (48 * 1.1) == '4' 

ch %= 16; // `\u0004` 
int i = ch; // 4 

順便說一句:從String.hashCode()

// int h = 0; 
char val[] = value; 
int len = count; 

for (int i = 0; i < len; i++) { 
    h = 31*h + val[off++]; 
} 
相關問題