当你将角色转换为C中的int时,到底发生了什么?由于字符是一个字节而int是四个,你怎么能得到一个字符的整数值?它是被视为数字的位模式吗?以角色'A'为例。位模式01000001(即二进制65)?
答案 0 :(得分:6)
char
和int
都是整数类型。
将值从任何算术(整数或浮点)类型转换为另一种算术类型时,转换会尽可能保留值。算术转换总是根据值而不是表示来定义(尽管一些规则设计为在大多数硬件上简单实现)。
在您的情况下,您可能有:
char c = 'A';
int i = c;
c
是char
类型的对象,其值为65
(假设为ASCII表示)。从char
到int
的转换产生int
,其值为65
。编译器会生成实现这一目标所需的任何代码;就表示而言,它可以用0位进行符号扩展或填充。
当源表达式的值可以表示为目标类型的值时,这适用。对于char
到int
的转化,这种情况(几乎)总是如此。对于其他一些转换,当价值不合适时,有各种规则可以做什么:
(int)1.0e100
可能会产生某些任意值,或者它可能导致程序崩溃),如果它已经崩溃在范围内但不精确的是通过舍入或截断来近似; unsigned)-1 == UINT_MAX)
; (浮点转换也必须处理精度。)
除了将整数转换为无符号类型之外,通常应避免超出范围的转换。
顺便提一下,虽然int
可能恰好是您系统上的4个字节,但只要它能够表示从-32767
到+32767
的值,它就可以是任意大小。各种整数类型的范围,甚至是字节中的位数,都是实现定义的(标准强加了一些限制)。 8位字节几乎是通用的。 32位int
非常常见,但较旧的系统通常具有16位int
(并且我已经在64位int
的系统上工作过。)