![](/img/trans.png)
[英]What does the following mean in context of programming, specifically C programming language?
[英]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
可能相似,但不同)。 两个int
的is 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.