7

刚才我读到“char 是 Java 中唯一的无符号整数原始类型”。这是否意味着 char 是 Java 中的整数类型之一?

和C一样,最近我读到C类型包括标量类型、函数类型、联合类型、聚合类型,标量类型包括指针类型和算术类型,那么算术类型包括整数类型和浮点类型,整数类型包括枚举类型和字符类型。

char 类型真的可以在 Java 和 C 中都归类为整数吗?

4

8 回答 8

8

是的,achar在它出现的所有流行语言中都是一个整数类型。“积分”意味着它的光谱是离散的,并且任何两个不同值之间的最小差异是1。与其他整数类型相比,所需的支持值范围通常非常小。计算机硬件传统上将整数视为基本数据类型;相比之下,算术浮点类型是一种更新且更复杂的添加。

于 2012-07-26T14:51:11.050 回答
5

类似于@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++];
}
于 2012-07-26T15:09:44.870 回答
4

根据 Java Primitive Data Types教程:

char:char 数据类型是单个 16 位 Unicode 字符。它的最小值为“\u0000”(或 0),最大值为“\uffff”(或 65,535,包括在内)。

所以是的,它是一个 16 位无符号整数。使用类型来表示数字还是字符取决于您...


还要记住,虽然charJava 中的类型保证为 16 位,但 C 施加的唯一限制是类型必须至少为 8 位。根据this answer的C规范参考:

不是位域的最小对象的最大位数(字节)

CHAR_BIT 8

因此char,C 中的 a 不一定代表与charJava 中的 a 相同的整数值范围。

于 2012-07-26T14:52:29.450 回答
3

我不确定整数类型的正式定义,但简而言之,是的,char它是 Java 中的整数类型,因为它可以被视为表示整数。

你可以例如做

char c1 = 'a' + 'b';

char c2 = 5;

char c3 = c2 + 3;

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

等等。

于 2012-07-26T14:50:19.537 回答
1

在记忆中,基本上一切都是不可或缺的……但是是的。char 是 C、C++ 和 Java 中的整数类型。

于 2012-07-26T14:50:41.103 回答
1

Char 是 C 及其相关后代中的“整数数据类型”。根据 K&R Book,“根据定义,字符只是小整数”。它们用于存储“字符”数据。

ASCII 表列出了 128 个字符,每个文本字符对应一个整数值。

Char 数据类型为 1 字节(8 位)。因此,它们最多可以存储 2^8 = 256 个不同的整数。(这 256 个不同的整数对应不同的 ASCII 或 UTF 字符。)

例如:

根据 ASCII 标准,字母“x”存储为 01111000(十进制 120)。

例如,您可以在 char 变量中添加一个值,就像任何整数一样!

int main()
{
    char a='x';
    int b=3+a;
    printf("value is:\n%d",b);
    return 0;
 }

输出:b=123(3 + 120 用于 char 'x')

即字符只是数字(整数:0-256(无符号))。

于 2020-03-07T13:29:23.223 回答
0

C 规范要求将char类型实现为 1 字节整数。其他类型的规格并不总是那么清楚。例如,最初的 Kernigan 和 Ritchie C 书中说,就shortlong而言,在不同的实现中,你只能依靠short不长于long的事实。

于 2012-07-26T14:52:35.747 回答
0

是的,char 类型可以归类为整数:

int i = 49;
int k = 36;

System.out.print((char)i + (char)k + "$"); //may expect 1$ but print: 85$
于 2020-04-27T19:20:17.297 回答