它非常尴尬,但我真的想知道......所以我需要制作一个将十进制(基数为10)转换为二进制和十六进制的转换程序。我使用数组来存储值,一切都很好,但我将数组声明为int arr[1000];
,因为我认为1000只是一个正确的数字,不是太大,不是很小......课堂上有人说“为什么会你声明一个1000的数组?整数是32位“。我太尴尬了,不知道这意味着什么,所以我没有说什么。但这是否意味着我可以将数组声明为int arr[32];
而不是?我正在使用C btw
答案 0 :(得分:0)
不,int
类型通常具有32位大小,但是当您声明为
时
int arr[1000];
你保留1000个整数的空间,即32� 000,而与
int arr[32];
你最多可以存储32个整数。
你实际上问自己这样一个问题:如果一个苹果重32克,我想要我的包去
包含1000个苹果或32个苹果?
答案 1 :(得分:0)
不要尴尬。恐惧是你的敌人,最终你将被视为基于你没有希望产生重大影响的背景。无论如何,要回答你的问题,你的方法是不正确的。您应该声明数组的大小完全取决于使用的位置数。
具体来说,如果你在87个不同的位置(从0到86)访问数组,那么你需要87的大小。
答案 2 :(得分:0)
0
到4,294,967,295
是您可以存储在32位中的最大可能数字范围。如果您的数字超出此范围,则无法以32位存储您的数字。因为每个位将占用一个数组的索引位置如果数字落在该范围内32
的数组大小会很好。例如,考虑数字9,它将作为a[]={1,0,0,1}
存储在数组中。
为了知道已知的数字范围,您的公式为0 to (2^n -1)
,其中n是二进制的位数。表示数组大小为4或4位,您只能存储范围0 to 15
中的数字。
在C中,如果使用无符号整数,则整数数据类型通常最多可以存储2,147,483,647
和4,294,967,295
。由于最大值,可以在C中存储的整数数据类型在可以使用32位表示的最大可能数的范围内。可以肯定地说,数组大小为32是定义数组的最佳大小。使用int表示任何数字都不需要超过32位。
答案 3 :(得分:0)
我会用
int a = 42;
char bin[sizeof a * CHAR_BIT + 1];
char hex[sizeof a * CHAR_BIT / 4 + 1]
我认为这包括所有可能性。
答案 4 :(得分:0)
考虑到'int'类型也是不明确的。通常它取决于您正在使用的机器,至少它的范围是:-32767,+ 32767:
https://en.wikipedia.org/wiki/C_data_types
我可以建议使用stdint类型吗?
答案 5 :(得分:0)
你做的是没关系的。如果这正是你想要做的。 C语言可以让你做任何你想做的事情。无论你什么时候想要。你在宣言上受到谴责的原因是因为“徘徊”。记忆。想到的是,DARE你如何占用可能从未使用过的空间......这是低效的。
确实如此。但谁愿意关心你是否只想运行一个有简单目的的程序?与计算机相比,1000 16或32位的内存块非常小,因为需要关注您占用多少RAM。所以 - 继续。
但接下来应该说的是如何避免这种情况。最后还有更多内容 - 但首先是关于C中内置数据类型的事情。
int可以是16位或32位,具体取决于您的声明方式。还有你的编译器设置......
LONG int是32。
考虑:
short int x = 10; // declares an integer that is 16 bits
signed int x = 10; // 32 bit integer with negative and positive range
unsigned int x = 10 // same 32 bit integer - but only 0 to positive values
要专门编码32位整数,请将其声明为“长'
”long int = 10; // 32 bit
unsigned long int = 10; // 32 bit 0 to positive values
典型的命名法是将16位值称为WORD,将32位值称为DWORD - (双字)。但是你为什么要输入:
long int x = 10;
而不是:
int x = 10;
??原因有几个。如果符合旧标准,一些编译器可能会将int作为16位WORD处理。但唯一真正的原因是维持一个强类型代码的约定。让它直接读取您打算做的事情。这也有助于提高可读性。当你看到它时,你会知道它的大小是肯定的,并且在编码时会被提醒。由于缺乏对代码实践的关注并且很好地命名事物,会发生许多代码错误。现在通过学习好习惯,以后可以节省数小时的头痛。创建您自己的编码风格。看看其他款式,只是为了了解行业的预期。但最终你会发现自己的方式。
关于数组问题--->所以,我希望你知道数组在程序运行时会占用内存。那么,wham - 该阵列的RAM仅用于您的程序。它被操作系统正在处理的任何其他资源,服务等锁定使用。
但是,如果你可以在你想要的时候使用你需要的内存,然后在完成后放手,它会不会很整洁?程序内部 - 运行时。因此,当您的程序首次启动时,阵列(可以这么说)将为零。当你需要一个'插槽时在数组中,您可以添加一个....使用它,然后让它去 - 或者添加另一个 - 或者再添加一个......等等。
这称为动态内存分配。它需要使用您可能尚未遇到的数据类型。查找" C"中的指针得到一个介绍。
如果您使用常规C进行编码,则有一些函数可以帮助执行动态内存分配:
malloc and free ~ in the alloc.h library routines
在C ++中,它们的实现方式不同。寻找:
new and delete
用于处理动态数组的常用结构'被称为"链表。"看一下......
不要让别人对代码概念感到慌乱。下次只说你的程序旨在准确处理你的意图。这通常会阻止讨论。