刚才我读到“char 是 Java 中唯一的无符号整数原始类型”。这是否意味着 char 是 Java 中的整数类型之一?
和C一样,最近我读到C类型包括标量类型、函数类型、联合类型、聚合类型,标量类型包括指针类型和算术类型,那么算术类型包括整数类型和浮点类型,整数类型包括枚举类型和字符类型。
char 类型真的可以在 Java 和 C 中都归类为整数吗?
是的,achar
在它出现的所有流行语言中都是一个整数类型。“积分”意味着它的光谱是离散的,并且任何两个不同值之间的最小差异是1
。与其他整数类型相比,所需的支持值范围通常非常小。计算机硬件传统上将整数视为基本数据类型;相比之下,算术浮点类型是一种更新且更复杂的添加。
类似于@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++];
}
根据 Java Primitive Data Types教程:
char:char 数据类型是单个 16 位 Unicode 字符。它的最小值为“\u0000”(或 0),最大值为“\uffff”(或 65,535,包括在内)。
所以是的,它是一个 16 位无符号整数。使用类型来表示数字还是字符取决于您...
char
Java 中的类型保证为 16 位,但 C 施加的唯一限制是类型必须至少为 8 位。根据this answer的C规范参考:
不是位域的最小对象的最大位数(字节)
CHAR_BIT 8
因此char
,C 中的 a 不一定代表与char
Java 中的 a 相同的整数值范围。
我不确定整数类型的正式定义,但简而言之,是的,char
它是 Java 中的整数类型,因为它可以被视为表示整数。
你可以例如做
char c1 = 'a' + 'b';
char c2 = 5;
char c3 = c2 + 3;
int i = c3;
char c4 = (char) i;
等等。
在记忆中,基本上一切都是不可或缺的……但是是的。char 是 C、C++ 和 Java 中的整数类型。
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(无符号))。
C 规范要求将char类型实现为 1 字节整数。其他类型的规格并不总是那么清楚。例如,最初的 Kernigan 和 Ritchie C 书中说,就short和long而言,在不同的实现中,你只能依靠short不长于long的事实。
是的,char 类型可以归类为整数:
int i = 49;
int k = 36;
System.out.print((char)i + (char)k + "$"); //may expect 1$ but print: 85$