繁体   English   中英

以下在 C 编程语言的上下文中是什么意思?

[英]What does the following mean in context of C programming language?

来自 Jens Gustedt 的现代 C,

计算机上的值表示在“文化上”会因架构而异,或者由程序员赋予该值的类型决定。 因此,如果我们想编写可移植的代码,我们应该尝试主要推理值而不是表示。

如果您已经在 C 和操作字节和位方面有一些经验,那么您将需要努力主动“忘记”您在本节的大部分内容中的知识。 在你的计算机上思考价值的具体表示会抑制你而不是帮助。

外卖 - C 程序主要对值进行推理,而不是对其表示进行推理。

问题 1:作者在谈论什么样的价值观“表现”? 我能否举一个例子,这个“表示”因架构而异,还有一个例子说明值的表示是如何由程序员赋予值的类型决定的?

问题 2:在 C 语言中指定数据类型的目的是什么,我的意思是这是语言的规则,但我听说编译器就是这样知道要分配给 ZA8CFDE63311BD59EB2AC96F8 多少 memory? 这是唯一的用途,尽管很重要? 我听说不需要在 Python 中指定数据类型。

作者在谈论什么样的价值观“代表”?

https://en.wikipedia.org/wiki/Two%27s_complement vs https://en.wikipedia.org/wiki/Ones%27_complement vs https://en.wikipedia.org/wiki/Offset_binary . 一般为 https://en.wikipedia.org/wiki/Signed_number_representations

还有大量的浮点数格式https://en.wikipedia.org/wiki/Floating-point_arithmetic#IEEE_754:_floating_point_in_modern_computers - IEEE 745、minifloat、bfloat16 等。

我可以举一个例子吗,这个“表示”因架构而异

您的 PC 使用二进制补码与https://superuser.com/questions/1137182/is-there-any-existing-cpu-implementation-which-uses-ones-complement

啊——当然,最值得注意的是https://en.wikipedia.org/wiki/Endianness

还有一个例子,说明值的表示是如何由类型程序员赋予值的?

(float)1在 IEEE 745 中表示为0b00111111100000000000000000000000 https://www.h-schmidt.net/FloatConverter/IEEE754.ZFC35FDC70D2229D239EZ8A3

(unsigned)1具有 32 位int表示为0b00.....0001

在 C 语言中指定数据类型的目的是什么,

有效地使用计算机资源。 保留 2 GB 来存储 8 位数据是没有意义的。 类型决定了变量中可以“包含”的值的范围。 您将允许值的“上限/下限”传达给编译器,编译器会生成漂亮且快速的代码。 (还有ADA ,您可以从字面上指定类型的范围,例如type Day_type is range 1.. 31; )。

程序是使用https://en.wikipedia.org/wiki/Harvard_architecture编写的。 块 scope 的变量被放入堆栈https://en.wikipedia.org/wiki/Stack_(abstract_data_type)#Hardware_stack 这个想法是您必须提前知道要从堆栈中保留多少字节。 类型就是这样交流的。

听说编译器就是这样知道要分配多少 memory 给 object?

类型向编译器传达了为 object 分配多少 memory,但它也传达了值的范围,表示形式( float_Float32可能相似,但不同)。 两个intis invalid, overflowing addition of two unsigned 的溢出加法是可以的。 有区别。

这是唯一的用途,尽管很重要?

类型最重要的用途是将代码的目的清楚地传达给其他开发人员

char character;
int numerical_variable;
uint_least8_t variable_with_8_bits_that_is_optimized_for_size;
uint_fast8_t variable_with_8_bits_that_is_optimized_for_speed;
wchar_t wide_character;
FILE *this_is_a_file;

我听说不需要在 Python 中指定数据类型。

这实际上是静态类型编程语言和动态类型编程语言之间的区别。 https://en.wikipedia.org/wiki/Type_system#Type_checking

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM