如果字符可以保存整数,那么为什么需要使用整数?

时间:2010-09-02 13:10:13

标签: c types

为什么我们在C中使用整数?

#include<stdio.h>
int main()
{
    char c=10;
    printf("%d",c);
    return 0;
}

与:

相同
#include<stdio.h>
int main()
{
    int c=10;
    printf("%d",c);
    return 0;

}

8 个答案:

答案 0 :(得分:21)

从技术上讲,所有数据类型都以0和1表示。那么,如果它们在后端完全相同,为什么我们需要不同的类型呢?

嗯,类型是数据的组合,以及您可以对数据执行的操作。

我们有ints代表数字。他们有+之类的操作来计算两个数字的总和,或-来计算差异。

当你想到一个角色时,通常意义上它代表一个人类可读格式的字母或符号。能够总结'A' + 'h'没有意义。 (即使c允许你这样做。)

因此,我们使用不同语言的不同类型来简化编程。它们基本上封装了数据以及合法执行的功能/操作。

Wikipedia有一篇关于Type Systems的好文章。

答案 1 :(得分:11)

因为char仅保留-127到127

的数字

答案 2 :(得分:3)

一个字符只能保留8位,而整数可以有16位,32位甚至64位(long long int)。

答案 3 :(得分:2)

试试这个:

#include <stdio.h>
int main()
{
    int c = 300;
    printf("%d", c);
    return 0;
}

#include <stdio.h>
int main()
{
    char c = 300;
    printf("%d", c);
    return 0;
}

数据类型charshortintlonglong long拥有(可能)不同大小的整数,这些整数可以取值达到某个值限制。 char包含一个8位数字(技术上既不是signed也不是unsigned,但实际上是一个或另一个)。因此,范围仅为256(-127到128或0到255)。

良好做法是避免charshortintlonglong long并使用int8_tint16_tint32_tuint8_t等,甚至更好:int_fast8_tint_least8_t等。

答案 4 :(得分:2)

从广义上讲,char意味着是机器上敏感数据存储的最小单位,但int意味着正常计算的“最佳”尺寸(例如,寄存器的大小)。任何数据类型的大小都可以表示为char s的数量,但不一定是int的数量。例如,在Microchip的PIC16上,char为8位,int为16位,short long为24位。 (short long必须是我遇到的最愚蠢的类型限定符。)

请注意,char 必须是8位,但通常是。推论:任何时候有人声称它是8位,有人会插入并命名机器而不是。

答案 5 :(得分:2)

从机器架构的角度来看, char 是一个可以用8位表示的值(非8位架构曾经发生过什么?)。

int 中的位数不固定;我相信它被定义为特定机器的“自然”值,即该机器操作最容易/最快的位数。

如上所述,计算机中的所有值都存储为二进制位序列。这些位的解释方式各不相同。它们可以被解释为二进制数字或代表其他东西的代码,例如一组字母字符,或许多其他可能性。

当C首次设计时,假设256个代码足以代表字母表中的所有字符。 (实际上,这可能不是假设,但当时它已经足够好了,设计师们试图保持语言简单并与当时的机器架构相匹配)。因此,8位值(256种可能性)被认为足以容纳字母字符代码, char 数据类型被定义为便利

免责声明:以上所述内容均为我的意见或猜测。 C的设计师是唯一能够真正回答这个问题的人。

一个更简单但又误导性的答案是你不能在 char 中存储整数值257,但你可以在 int 中存储。 天然

答案 6 :(得分:1)

因为

#include <stdio.h>

int main(int argc, char **argv)
{
        char c = 42424242;
        printf("%d", c); /* Oops. */
        return(0);
}

答案 7 :(得分:1)

char cant 保持整数可以。不是一切。
至少不是为char指定值的方式。 做一些sizeof试验,看看charint之间是否存在差异。

如果您真的希望使用char而不是int,则可能应该考虑使用char[],并存储数字的ASCII,基数10字符表示。 : - )