Skip to content

c#

The C Memory Model

Pointers present us with a certain abstraction of the environment and state in which our program is executed, the C memory model. We may apply the unary operator & to (almost) all objects to retrieve their address and use it to inspect and change the state of our execution.

Binary —— Bitset & Bytes

所谓数制是指计数的方法。对于有10根手指的人来来说,使用十进制表示法是很自然的事情,现代计算机则采用的是二进制系统,存储和处理的信息以二值信号表示。

一串二进制数码按照固定长度(8)组合出有意义的基本存储单位——字节,多个字节(1,2,4,8)可以组合出基本算术单元 char,short,int/float,long/double,或复合类型和用户自定义类型。

在计算机内存或磁盘上,指令和数据没有任何区别,都是二进制信息。CPU 在工作的时候把有的信息解析为指令,有的信息解读为数据,为同样的信息赋予了不同的意义。

这涉及到 Abstract State Machine

  • a value : what state are we in
  • the type : what this state represents
  • the representation : how state is distinguished

C Basic Types - Binary Representions

Values have a type and a binary representation.

The binary representation of a type is a model that describes the possible values for that type. It is not the same as the in-memory object representation that describes the more or less physical storage of values of a given type.

TAKEAWAY 5.49

TAKEAWAY 5.49 The same value may have different binary representations.

C语言标准与实现之整数类型

在 C 语言刚刚被设计出来的时候,一共只有两种整数类型 —— charint。C89 引入了两种新的整数类型 —— shortlong,C99 再增加一种整数类型 —— long long。

后来,随着 C 语言的进一步发展,K&R C 引入了无符号整数的概念以及 unsigned 关键字。char 既不属于标准带符号整数类型也不属于标准无符号整数类型,它属于历史遗物。

C89 引入 signed 关键字后,可显式声明 signed char,明确表达最小的标准带符号整数类型。

为什么 getchar() 返回的类型是 int,而不是 char?

C Data Types

A C program, whatever its size, consists of functions and variables. A function contains statements that specify the computing operations to be done, and variables store values used during the computation.

在 C 程序里,函数(function)就是指令,变量(variable)就是数据。数据类型定义了变量的存储和访问属性,约束了其大小边界(size/boundary)、取值范围(value range)、解释呈现(interpretation/representation)和可操作集(operation set)。