为什么我们在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;
}
答案 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;
}
数据类型char
,short
,int
,long
和long long
拥有(可能)不同大小的整数,这些整数可以取值达到某个值限制。 char
包含一个8位数字(技术上既不是signed
也不是unsigned
,但实际上是一个或另一个)。因此,范围仅为256(-127到128或0到255)。
良好做法是避免char
,short
,int
,long
和long long
并使用int8_t
,int16_t
,int32_t
,uint8_t
等,甚至更好:int_fast8_t
,int_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
试验,看看char
和int
之间是否存在差异。
如果您真的希望使用char
而不是int
,则可能应该考虑使用char[]
,并存储数字的ASCII,基数10字符表示。 : - )