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

C 如果字符可以保存整数,那么为什么需要使用整数呢?,c,types,C,Types,为什么我们在C语言中使用整数 #include<stdio.h> int main() { char c=10; printf("%d",c); return 0; } #包括 int main() { 字符c=10; printf(“%d”,c); 返回0; } 同: #include<stdio.h> int main() { int c=10; printf("%d",c); return 0; } #包括 i

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

#include<stdio.h>
int main()
{
    char c=10;
    printf("%d",c);
    return 0;
}
#包括
int main()
{
字符c=10;
printf(“%d”,c);
返回0;
}
同:

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

}
#包括
int main()
{
int c=10;
printf(“%d”,c);
返回0;
}

因为
char
只保存从-127到127的数字

一个字符只能保存8位,而整数可以有16位、32位甚至64位(长整型)。

试试这个:

#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;
}
#包括
int main()
{
int c=300;
printf(“%d”,c);
返回0;
}
#包括
int main()
{
字符c=300;
printf(“%d”,c);
返回0;
}
数据类型
char
short
int
long
long
包含(可能)不同大小的整数,这些整数的值可以达到某个限制
char
保存一个8位数字(从技术上讲,它既不是有符号的,也不是无符号的,但实际上是一个或另一个)。因此,范围仅为256(-127到128或0到255)

好的做法是避免使用字符、短码、长码和长码,或者更好的方法是使用快速码、最少8码等

#include <stdio.h>

int main(int argc, char **argv)
{
        char c = 42424242;
        printf("%d", c); /* Oops. */
        return(0);
}
#包括
int main(int argc,字符**argv)
{
字符c=4242;
printf(“%d”,c);/*Oops*/
返回(0);
}

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

类型是数据和可以对数据执行的操作的组合

我们有表示数字的
int
。它们的操作类似于计算两个数字之和的
+
,或计算差的
-

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

因此,我们在不同的语言中有不同的类型,以使编程更容易。它们基本上封装了数据以及对其执行的合法功能/操作


有一篇关于类型系统的好文章。

广义上说,
char
是机器上可感知数据存储的最小单位,而
int
是正常计算的“最佳”大小(例如寄存器的大小)。任何数据类型的大小都可以表示为
char
s的数量,但不一定表示为
int
s的数量。例如,在微芯片的PIC16上,
char
是8位,
int
是16位,
short-long
是24位。(
short-long
将是我遇到的最愚蠢的类型限定符。)

请注意,
char
不一定是8位,但通常是。推论:每当有人声称它是8位时,就会有人插话说出一台机器的名称,而实际上它不是。char不能容纳整数所能容纳的。不是所有的。
至少不是以您为
char
赋值的方式。 对
sizeof
进行一些实验,看看
char
int
之间是否存在差异


如果您真的希望使用<代码> char <代码>而不是<代码> int <代码>,那么您可能应该考虑<代码> char []/Cord>,并存储ASCII,BASE 10,数字的字符表示。p> 从机器体系结构的角度来看,char是一个可以用8位表示的值(非8位体系结构发生了什么?)

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

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

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

免责声明:上面写的都是我的观点或猜测。C语言的设计者是唯一能够真正回答这个问题的人

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

它的保证范围是-127到127或0到255,因此0到127是可移植范围。这不是类型系统的“真实”原因。@caf默认情况下所有整数类型都是有符号的,不是吗?@Justin我不是在讨论类型系统的原因,但仅仅是回答OP的问题。@qrdl:Plain
char
是特殊的-它可以是有符号的或无符号的(实际上是与
signed char
unsigned char
不同的类型),或者大于64位;IBM Power7有128位整数寄存器。@Jonathan Leffler:C中整数类型的宽度取决于编译器,而不是机器体系结构。@Jeremy:true,Power7的编译器支持128位整数(也支持浮点小数)。我完全不同意这种“良好做法”<代码>字符<