Notes on C's abstract state machine and basic types.
parent
3f54cbe3b9
commit
acce4a0d83
|
@ -281,9 +281,9 @@
|
||||||
"_journal/2024-02-23.md": "219ce9ad15a8733edd476c97628b71fd",
|
"_journal/2024-02-23.md": "219ce9ad15a8733edd476c97628b71fd",
|
||||||
"_journal/2024-02/2024-02-22.md": "312e55d57868026f6e80f7989a889c2b",
|
"_journal/2024-02/2024-02-22.md": "312e55d57868026f6e80f7989a889c2b",
|
||||||
"c17/strings.md": "2da50edd26eae35c81f70e65bbd12d49",
|
"c17/strings.md": "2da50edd26eae35c81f70e65bbd12d49",
|
||||||
"c17/index.md": "7662b066e7cf52e94d21fed57dfe227f",
|
"c17/index.md": "c96078cda31616017b0a6036ac87e60b",
|
||||||
"c17/escape-sequences.md": "a8b99070336878b4e8c11e9e4525a500",
|
"c17/escape-sequences.md": "a8b99070336878b4e8c11e9e4525a500",
|
||||||
"c17/declarations.md": "9d0cf7a345d89b454447b3f66d4b7b64",
|
"c17/declarations.md": "2b61706906d8ae935e0b56e962ad2fa8",
|
||||||
"algorithms/sorting/merge-sort.md": "6506483f7df6507cee0407bd205dbedd",
|
"algorithms/sorting/merge-sort.md": "6506483f7df6507cee0407bd205dbedd",
|
||||||
"_journal/2024-02-24.md": "9bb319d5014caf962a9ce3141076cff4",
|
"_journal/2024-02-24.md": "9bb319d5014caf962a9ce3141076cff4",
|
||||||
"_journal/2024-02/2024-02-23.md": "0aad297148e8cc4058b48b7e45787ca7",
|
"_journal/2024-02/2024-02-23.md": "0aad297148e8cc4058b48b7e45787ca7",
|
||||||
|
@ -534,7 +534,7 @@
|
||||||
"_journal/2024-06/2024-06-04.md": "52b28035b9c91c9b14cef1154c1a0fa1",
|
"_journal/2024-06/2024-06-04.md": "52b28035b9c91c9b14cef1154c1a0fa1",
|
||||||
"_journal/2024-06-06.md": "3f9109925dea304e7172df39922cc95a",
|
"_journal/2024-06-06.md": "3f9109925dea304e7172df39922cc95a",
|
||||||
"_journal/2024-06/2024-06-05.md": "b06a0fa567bd81e3b593f7e1838f9de1",
|
"_journal/2024-06/2024-06-05.md": "b06a0fa567bd81e3b593f7e1838f9de1",
|
||||||
"set/relations.md": "fa91d0d77961f49651f7d9f5d4c392f5",
|
"set/relations.md": "feaa8115db02fbbda77b483c37f183ca",
|
||||||
"_journal/2024-06-07.md": "795be41cc3c9c0f27361696d237604a2",
|
"_journal/2024-06-07.md": "795be41cc3c9c0f27361696d237604a2",
|
||||||
"_journal/2024-06/2024-06-06.md": "db3407dcc86fa759b061246ec9fbd381",
|
"_journal/2024-06/2024-06-06.md": "db3407dcc86fa759b061246ec9fbd381",
|
||||||
"_journal/2024-06-08.md": "b20d39dab30b4e12559a831ab8d2f9b8",
|
"_journal/2024-06-08.md": "b20d39dab30b4e12559a831ab8d2f9b8",
|
||||||
|
@ -710,13 +710,13 @@
|
||||||
"_journal/2024-08/2024-08-10.md": "08e7ea4a78c46645b93ec51e2372d04f",
|
"_journal/2024-08/2024-08-10.md": "08e7ea4a78c46645b93ec51e2372d04f",
|
||||||
"_journal/2024-08-12.md": "8a37a2d1381f9d9e29d83031bad80dd0",
|
"_journal/2024-08-12.md": "8a37a2d1381f9d9e29d83031bad80dd0",
|
||||||
"_journal/2024-08/2024-08-11.md": "acc91e07b43590e90846d2c936dcb3d5",
|
"_journal/2024-08/2024-08-11.md": "acc91e07b43590e90846d2c936dcb3d5",
|
||||||
"c17/types.md": "2bca56b2d95cc358553fb798acde6522",
|
"c17/types.md": "941438a8f8377e348192d1822e765e40",
|
||||||
"_journal/2024-08-14.md": "800650b9fa2f4445a174e0a547c2fa95",
|
"_journal/2024-08-14.md": "800650b9fa2f4445a174e0a547c2fa95",
|
||||||
"_journal/2024-08/2024-08-13.md": "8b64225b06d1164a91176b123a3513a2",
|
"_journal/2024-08/2024-08-13.md": "8b64225b06d1164a91176b123a3513a2",
|
||||||
"_journal/2024-08/2024-08-12.md": "e57b03b929410f3111c894e43e1728ec",
|
"_journal/2024-08/2024-08-12.md": "e57b03b929410f3111c894e43e1728ec",
|
||||||
"_journal/2024-08-15.md": "fabf6e09bfd99cd180a4c674f83ebcb9",
|
"_journal/2024-08-15.md": "fabf6e09bfd99cd180a4c674f83ebcb9",
|
||||||
"_journal/2024-08/2024-08-14.md": "f7d1dede5ab6e4634ad9de3d3426c6f7",
|
"_journal/2024-08/2024-08-14.md": "f7d1dede5ab6e4634ad9de3d3426c6f7",
|
||||||
"_journal/2024-08-16.md": "15fab7ec5b9dc08e4065a1bce88653c7",
|
"_journal/2024-08-16.md": "a25c680684bcffc6a38cebbb448d9d97",
|
||||||
"_journal/2024-08/2024-08-15.md": "7c3a96a25643b62b0064bf32cb17d92f"
|
"_journal/2024-08/2024-08-15.md": "7c3a96a25643b62b0064bf32cb17d92f"
|
||||||
},
|
},
|
||||||
"fields_dict": {
|
"fields_dict": {
|
||||||
|
|
|
@ -8,4 +8,5 @@ title: "2024-08-16"
|
||||||
- [ ] Sheet Music (10 min.)
|
- [ ] Sheet Music (10 min.)
|
||||||
- [ ] Korean (Read 1 Story)
|
- [ ] Korean (Read 1 Story)
|
||||||
|
|
||||||
* Notes on [[relations#Preorders|preorders]] and [[relations#Partial Orders|partial orders]].
|
* Notes on [[relations#Preorders|preorders]] and [[relations#Partial Orders|partial orders]].
|
||||||
|
* Details on C's [[c17/index|abstract state machine]] and [[types|integer types]].
|
|
@ -498,14 +498,6 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program
|
||||||
<!--ID: 1707493017237-->
|
<!--ID: 1707493017237-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
Is declaration `char` signed or unsigned?
|
|
||||||
Back: This is implementation-dependent.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1707493017239-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Cloze
|
Cloze
|
||||||
{1:`float`} has {2:4} byte precision whereas {2:`double`} has {1:8} byte precision.
|
{1:`float`} has {2:4} byte precision whereas {2:`double`} has {1:8} byte precision.
|
||||||
|
@ -703,211 +695,6 @@ Reference: Van der Linden, Peter. _Expert C Programming: Deep C Secrets_. Progra
|
||||||
<!--ID: 1722786892138-->
|
<!--ID: 1722786892138-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
## Integer Literals
|
|
||||||
|
|
||||||
Negative integer literals are typed in a counterintuitive way. When the compiler sees a number of form `-X`, the type of `X` is determined *before* being negated. Promotion rules are as follows:
|
|
||||||
|
|
||||||
Decimal | Other Bases
|
|
||||||
----------- | --------------------
|
|
||||||
`int` | `int`
|
|
||||||
`long` | `unsigned`
|
|
||||||
`long long` | `long`
|
|
||||||
`-` | `unsigned long`
|
|
||||||
`-` | `long long`
|
|
||||||
`-` | `unsigned long long`
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
How does the compiler process integer literal `-X`?
|
|
||||||
Back: By first determining the type of `X` and then negating the value.
|
|
||||||
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820805-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What integer literals are guaranteed `signed`?
|
|
||||||
Back: Decimal integer constants.
|
|
||||||
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820826-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
How do we specify an octal integer literal?
|
|
||||||
Back: Prepend the literal with a `0`.
|
|
||||||
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1710673807992-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
Why avoid negative octal integer literals?
|
|
||||||
Back: Depending on value, the resulting type may be `unsigned`.
|
|
||||||
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820829-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
How do we specify a hexadecimal integer literal?
|
|
||||||
Back: Prepend the literal with a `0x` or `0X`.
|
|
||||||
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1710673807995-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Cloze
|
|
||||||
Octal literals are to {`0`} whereas hexadecimal literals are to {`0x`/`0X`}.
|
|
||||||
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1710673807997-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
How might C dangerously interpret a negative hexadecimal integer literal?
|
|
||||||
Back: Depending on the value, the resulting type may be `unsigned`.
|
|
||||||
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820833-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
Which header file contains `INT_MAX`?
|
|
||||||
Back: `<limits.h>`
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708615249864-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Cloze
|
|
||||||
{`INT_MAX`} is to `signed` whereas {`UINT_MAX`} is to `unsigned`.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820837-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
How does `<limits.h>` define `INT_MIN`?
|
|
||||||
Back: As `(-INT_MAX - 1)`.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820840-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
*Why* is `INT_MIN` defined as `(-INT_MAX - 1)` instead of directly as e.g. `-2147483648`?
|
|
||||||
Back: Because `2147483648` (without `-`) would be sized as a non-`int` before being negated.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820843-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Cloze
|
|
||||||
`INT_MAX` is to {`<limits.h>`} whereas `INT32_MAX` is to {`<stdint.h>`}.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708615249873-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What suffix can be used to denote an `unsigned` integer literal?
|
|
||||||
Back: Case-insensitive `U`.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708615249876-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What suffix can be used to denote a `long` integer literal?
|
|
||||||
Back: Case-insensitive `L`.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820847-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What suffix can be used to denote a `long long` integer literal?
|
|
||||||
Back: Case-insensitive `LL`.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820850-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What suffix can be used to denote an `unsigned long long` integer literal?
|
|
||||||
Back: Case-insensitive `ULL`.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1708631820856-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
In what order does C cast size and "signedness"?
|
|
||||||
Back: C casts size then signedness.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1714677608760-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
In what order does C cast "signedness" and size?
|
|
||||||
Back: C casts size then signedness.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1714677626482-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
Given `short sx`, cast `(unsigned) sx` is more explicitly written as what other sequence of casts?
|
|
||||||
Back: `(unsigned) (int) sx`
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1714677608762-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
Given `short sx`, are the following two lines equivalent?
|
|
||||||
```c
|
|
||||||
(unsigned) sx
|
|
||||||
(unsigned) (int) sx
|
|
||||||
```
|
|
||||||
Back: Yes.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1714677608764-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
Given `short sx`, are the following two lines equivalent?
|
|
||||||
```c
|
|
||||||
(unsigned) sx
|
|
||||||
(unsigned) (unsigned short) sx
|
|
||||||
```
|
|
||||||
Back: No.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1714677608766-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
Given `short sx`, why is the following not an identity?
|
|
||||||
```c
|
|
||||||
(unsigned) sx = (unsigned) (unsigned short) sx
|
|
||||||
```
|
|
||||||
Back: `(unsigned) sx` casts size before "signedness".
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1714677608767-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What does "signedness" of a variable refer to?
|
|
||||||
Back: Whether the variable was declared `signed` or `unsigned`.
|
|
||||||
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
|
||||||
<!--ID: 1714677608769-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
## Bibliography
|
## Bibliography
|
||||||
|
|
||||||
* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
|
|
@ -8,14 +8,59 @@ tags:
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
An **object** is a region of data storage in the execution environment, the contents of which can represent **values**. We say an object type is **complete** if there is sufficient information to determine the size of objects of that type. Otherwise we say it is **incomplete**.
|
> A C program can be seen as a sort of machine that manipulates values: the particular values that variables of the program have at a given time, and also intermediate values that are the result of computed expressions.
|
||||||
|
|
||||||
An **lvalue** is an expression (with non-`void` object type) that potentially designates an object. An **rvalue** is the "value of the expression."
|
This quote describes C's **abstract state machine**. Whatever instructions a C program compiles down to is "unimportant" provided that all **observable states** are correctly reproduced. This is the essence of optimization.
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What feature of C's abstract state machine makes C performant?
|
||||||
|
Back: It enables optimization.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661330-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
C can compile into any sequence of instructions provided what holds?
|
||||||
|
Back: All observable states are correctly reproduced.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661337-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Why is C's abstract state machine called the way it is?
|
||||||
|
Back: Compilers are free to realize the state machine however they see fit.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661340-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What three components make up C's abstract state machine?
|
||||||
|
Back: Values, types, and binary representations.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661343-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Cloze
|
||||||
|
In C's abstract state machine, {binary representations} describe {types} which describe {values}.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856668033-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
An **object** is a region of data storage in the execution environment, the contents of which can represent **values**. An **lvalue** is an expression (with non-`void` object type) that potentially designates an object. An **rvalue** is the "value of the expression."
|
||||||
|
|
||||||
|
The notion of a value in C is an abstract entity. It exists beyond the program or the representation of the value in the program. For example, the value `0` (no matter how its represented) added to variable `x` should always yield result `x` regardless of platform.
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Basic
|
Basic
|
||||||
What does an object refer to?
|
What does an object refer to?
|
||||||
Back: A region of data storage in the execution environment, the contents of which can represent values.
|
Back: A region of data storage in the execution environment.
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
<!--ID: 1723510994830-->
|
<!--ID: 1723510994830-->
|
||||||
END%%
|
END%%
|
||||||
|
@ -28,6 +73,22 @@ Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70
|
||||||
<!--ID: 1723510994835-->
|
<!--ID: 1723510994835-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Why does Gustedt refer to values as abstract entities?
|
||||||
|
Back: A value exists beyond a program or any particular representation.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661349-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
How does Gustedt distinguish the data of a program execution from values?
|
||||||
|
Back: The data is the set of values of all objects at a given moment.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661358-->
|
||||||
|
END%%
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Cloze
|
Cloze
|
||||||
A {value} refers to the contents of an {object} when interpreted as having a specific type.
|
A {value} refers to the contents of an {object} when interpreted as having a specific type.
|
||||||
|
@ -35,54 +96,6 @@ Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70
|
||||||
<!--ID: 1723510994839-->
|
<!--ID: 1723510994839-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
Types are partitioned into what two categories?
|
|
||||||
Back: Object types and function types.
|
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
|
||||||
<!--ID: 1723510994842-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What is an object type?
|
|
||||||
Back: A type that describes objects.
|
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
|
||||||
<!--ID: 1723510994846-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What is a function type?
|
|
||||||
Back: A type that describes functions.
|
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
|
||||||
<!--ID: 1723510994851-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What two parts characterize a function type?
|
|
||||||
Back: The return type and the number/types of its parameters.
|
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
|
||||||
<!--ID: 1723510994856-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What does it mean for an object type to be complete?
|
|
||||||
Back: There is sufficient information to determine the size of objects of that type.
|
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
|
||||||
<!--ID: 1723510994866-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What does it mean for an object type to be incomplete?
|
|
||||||
Back: There is insufficient information to determine the size of objects of that type.
|
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
|
||||||
<!--ID: 1723510994870-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Basic
|
Basic
|
||||||
What is an lvalue?
|
What is an lvalue?
|
||||||
|
@ -115,22 +128,6 @@ Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70
|
||||||
<!--ID: 1723510994886-->
|
<!--ID: 1723510994886-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What object type can an lvalue *not* have?
|
|
||||||
Back: `void`
|
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
|
||||||
<!--ID: 1723510994890-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
|
||||||
Basic
|
|
||||||
What object type can an lvalue have?
|
|
||||||
Back: Any object type other than `void`.
|
|
||||||
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
|
||||||
<!--ID: 1723510994895-->
|
|
||||||
END%%
|
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Basic
|
Basic
|
||||||
Can an lvalue designate an object?
|
Can an lvalue designate an object?
|
||||||
|
@ -336,6 +333,67 @@ Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.ne
|
||||||
<!--ID: 1723510995006-->
|
<!--ID: 1723510995006-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
|
## Types
|
||||||
|
|
||||||
|
Types are additional properties that C associates with values. All values have a type that is statically determined and all possible operations on a value are determined by its type.
|
||||||
|
|
||||||
|
Types are categorized as function types and object types. An object type is **complete** if there is sufficient information to determine the size of objects of that type. Otherwise we say it is **incomplete**.
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Cloze
|
||||||
|
Possible operations on a {value} are determined by its {type}.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661364-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Types are partitioned into what two categories?
|
||||||
|
Back: Object types and function types.
|
||||||
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
<!--ID: 1723510994842-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What is an object type?
|
||||||
|
Back: A type that describes objects.
|
||||||
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
<!--ID: 1723510994846-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What is a function type?
|
||||||
|
Back: A type that describes functions.
|
||||||
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
<!--ID: 1723510994851-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What two parts characterize a function type?
|
||||||
|
Back: The return type and the number/types of its parameters.
|
||||||
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
<!--ID: 1723510994856-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What does it mean for an object type to be complete?
|
||||||
|
Back: There is sufficient information to determine the size of objects of that type.
|
||||||
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
<!--ID: 1723510994866-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What does it mean for an object type to be incomplete?
|
||||||
|
Back: There is insufficient information to determine the size of objects of that type.
|
||||||
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
<!--ID: 1723510994870-->
|
||||||
|
END%%
|
||||||
|
|
||||||
%%ANKI
|
%%ANKI
|
||||||
Basic
|
Basic
|
||||||
Does `x` have complete or incomplete object type in the following?
|
Does `x` have complete or incomplete object type in the following?
|
||||||
|
@ -369,6 +427,72 @@ Reference: ISO: Programming Languages - C,” April 12, 2011, [https://port70.ne
|
||||||
<!--ID: 1723510995023-->
|
<!--ID: 1723510995023-->
|
||||||
END%%
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What object type can an lvalue *not* have?
|
||||||
|
Back: `void`
|
||||||
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
<!--ID: 1723510994890-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What object type can an lvalue have?
|
||||||
|
Back: Any object type other than `void`.
|
||||||
|
Reference: “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
<!--ID: 1723510994895-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
## Representation
|
||||||
|
|
||||||
|
The **binary representation** of a type is the model used to represent values of said type on a given platform. The **object representation** of a type determines how values are stored in memory, disk, etc.
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What is the binary representation of a type?
|
||||||
|
Back: The model used to represent values of the type on a given platform.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661371-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What is the binary representation of a value?
|
||||||
|
Back: N/A. Binary representations describe types not values.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661379-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What is the object representation of a type?
|
||||||
|
Back: How a value of a given type is actually stored in memory, disk, etc.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661386-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Cloze
|
||||||
|
A {type}'s {binary representation} determines the results of all operations.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661393-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Why does Gustedt refer to binary representations as abstract entities?
|
||||||
|
Back: Binary representations don't completely determine how values are stored in memory.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661399-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Cloze
|
||||||
|
A {binary} representation is abstract whereas an {object} representation is concrete.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723856661405-->
|
||||||
|
END%%
|
||||||
|
|
||||||
## Bibliography
|
## Bibliography
|
||||||
|
|
||||||
* “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
* “ISO: Programming Languages - C,” April 12, 2011, [https://port70.net/~nsz/c/c11/n1570.pdf](https://port70.net/~nsz/c/c11/n1570.pdf).
|
||||||
|
|
|
@ -6,4 +6,420 @@ tags:
|
||||||
- c17
|
- c17
|
||||||
---
|
---
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
C has a series of basic types and means of constructing derived types from them.
|
||||||
|
|
||||||
|
## Integers
|
||||||
|
|
||||||
|
Type `char` is special since it can be signed or unsigned depending on platform. Keep in mind regardless of its signedness, it is still considered a distinct type from both the `unsigned char` and `signed char` type.
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Is declaration `char` signed or unsigned?
|
||||||
|
Back: This is implementation-dependent.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1707493017239-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
**Narrow types** cannot be used directly in arithmetic. Instead they are first promoted to a wider type. On almost every system, this promotion will be to a `signed int` of the same value, regardless of the signedness of the narrow type itself.
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Why are narrow types named the way they are?
|
||||||
|
Back: They are considered to small to be used directly in arithmetic expressions.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121959-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Signed narrow types are usually promoted to what larger type?
|
||||||
|
Back: A `signed int`.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121968-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Unsigned narrow types found are usually promoted to what larger type?
|
||||||
|
Back: A `signed int`.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121972-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
### Unsigned
|
||||||
|
|
||||||
|
These correspond to nonnegative integer values.
|
||||||
|
|
||||||
|
| Name | Narrow | Rank |
|
||||||
|
| -------------------- | ------ | ---- |
|
||||||
|
| `bool` | Yes | 0 |
|
||||||
|
| `char` (maybe) | Yes | 1 |
|
||||||
|
| `unsigned char` | Yes | 1 |
|
||||||
|
| `unsighed short` | Yes | 2 |
|
||||||
|
| `unsigned int` | No | 3 |
|
||||||
|
| `unsigned long` | No | 4 |
|
||||||
|
| `unsigned long long` | No | 5 |
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which basic unsigned type has the smallest rank?
|
||||||
|
Back: `bool`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121975-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which unsigned type next succeeds `bool` in rank?
|
||||||
|
Back: `unsigned char` and (maybe) `char`.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121979-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which unsigned type next succeeds `unsigned char` in rank?
|
||||||
|
Back: `unsigned short`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121983-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which unsigned type next succeeds `unsigned short` in rank?
|
||||||
|
Back: `unsigned int`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121987-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which unsigned type next succeeds `unsigned int` in rank?
|
||||||
|
Back: `unsigned long`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121993-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which unsigned type next succeeds `unsigned long` in rank?
|
||||||
|
Back: `unsigned long long`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859121999-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which unsigned type next succeeds `unsigned long long` in rank?
|
||||||
|
Back: N/A.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122007-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which unsigned narrow type has the highest rank?
|
||||||
|
Back: `unsigned short`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122015-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which unsigned non-narrow type has the smallest rank?
|
||||||
|
Back: `unsigned int`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122023-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
### Signed
|
||||||
|
|
||||||
|
These correspond to possibly negative integer values.
|
||||||
|
|
||||||
|
| Name | Narrow | Rank |
|
||||||
|
| -------------------- | ------ | ---- |
|
||||||
|
| `char` (maybe) | Yes | 1 |
|
||||||
|
| `signed char` | Yes | 1 |
|
||||||
|
| `signed short` | Yes | 2 |
|
||||||
|
| `signed int` | No | 3 |
|
||||||
|
| `signed long` | No | 4 |
|
||||||
|
| `signed long long` | No | 5 |
|
||||||
|
| `float` | - | - |
|
||||||
|
| `double` | - | - |
|
||||||
|
| `long double` | - | - |
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which basic signed type has the smallest rank?
|
||||||
|
Back: `signed char` and (maybe) `char`.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122030-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which signed type succeeds `signed char` in rank?
|
||||||
|
Back: `signed short`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122037-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which signed type succeeds `signed short` in rank?
|
||||||
|
Back: `signed int`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122044-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which signed type succeeds `signed int` in rank?
|
||||||
|
Back: `signed long`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122052-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which signed type succeeds `signed long` in rank?
|
||||||
|
Back: `signed long long`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122059-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which signed type succeeds `signed long long` in rank?
|
||||||
|
Back: N/A.
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122066-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which signed narrow type has the highest rank?
|
||||||
|
Back: `signed short`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122073-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which signed non-narrow type has the smallest rank?
|
||||||
|
Back: `signed int`
|
||||||
|
Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
<!--ID: 1723859122080-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
### Literals
|
||||||
|
|
||||||
|
Negative integer literals are typed in a counterintuitive way. When the compiler sees a number of form `-X`, the type of `X` is determined *before* being negated. Promotion rules are as follows:
|
||||||
|
|
||||||
|
| Decimal | Oct/Hex |
|
||||||
|
| ----------- | -------------------- |
|
||||||
|
| `int` | `int` |
|
||||||
|
| `long` | `unsigned` |
|
||||||
|
| `long long` | `long` |
|
||||||
|
| `-` | `unsigned long` |
|
||||||
|
| `-` | `long long` |
|
||||||
|
| `-` | `unsigned long long` |
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
How does the compiler process integer literal `-X`?
|
||||||
|
Back: By first determining the type of `X` and then negating the value.
|
||||||
|
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820805-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What integer literals are guaranteed `signed`?
|
||||||
|
Back: Decimal integer constants.
|
||||||
|
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820826-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
How do we specify an octal integer literal?
|
||||||
|
Back: Prepend the literal with a `0`.
|
||||||
|
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1710673807992-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Why avoid negative octal integer literals?
|
||||||
|
Back: Depending on value, the resulting type may be `unsigned`.
|
||||||
|
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820829-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
How do we specify a hexadecimal integer literal?
|
||||||
|
Back: Prepend the literal with a `0x` or `0X`.
|
||||||
|
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1710673807995-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Cloze
|
||||||
|
Octal literals are to {`0`} whereas hexadecimal literals are to {`0x`/`0X`}.
|
||||||
|
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1710673807997-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
How might C dangerously interpret a negative hexadecimal integer literal?
|
||||||
|
Back: Depending on the value, the resulting type may be `unsigned`.
|
||||||
|
Reference: Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820833-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Which header file contains `INT_MAX`?
|
||||||
|
Back: `<limits.h>`
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708615249864-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Cloze
|
||||||
|
{`INT_MAX`} is to `signed` whereas {`UINT_MAX`} is to `unsigned`.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820837-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
How does `<limits.h>` define `INT_MIN`?
|
||||||
|
Back: As `(-INT_MAX - 1)`.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820840-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
*Why* is `INT_MIN` defined as `(-INT_MAX - 1)` instead of directly as e.g. `-2147483648`?
|
||||||
|
Back: Because `2147483648` (without `-`) would be sized as a non-`int` before being negated.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820843-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Cloze
|
||||||
|
`INT_MAX` is to {`<limits.h>`} whereas `INT32_MAX` is to {`<stdint.h>`}.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708615249873-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What suffix can be used to denote an `unsigned` integer literal?
|
||||||
|
Back: Case-insensitive `U`.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708615249876-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What suffix can be used to denote a `long` integer literal?
|
||||||
|
Back: Case-insensitive `L`.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820847-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What suffix can be used to denote a `long long` integer literal?
|
||||||
|
Back: Case-insensitive `LL`.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820850-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What suffix can be used to denote an `unsigned long long` integer literal?
|
||||||
|
Back: Case-insensitive `ULL`.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1708631820856-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
In what order does C cast size and "signedness"?
|
||||||
|
Back: C casts size then signedness.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1714677608760-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
In what order does C cast "signedness" and size?
|
||||||
|
Back: C casts size then signedness.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1714677626482-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Given `short sx`, cast `(unsigned) sx` is more explicitly written as what other sequence of casts?
|
||||||
|
Back: `(unsigned) (int) sx`
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1714677608762-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Given `short sx`, are the following two lines equivalent?
|
||||||
|
```c
|
||||||
|
(unsigned) sx
|
||||||
|
(unsigned) (int) sx
|
||||||
|
```
|
||||||
|
Back: Yes.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1714677608764-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Given `short sx`, are the following two lines equivalent?
|
||||||
|
```c
|
||||||
|
(unsigned) sx
|
||||||
|
(unsigned) (unsigned short) sx
|
||||||
|
```
|
||||||
|
Back: No.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1714677608766-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
Given `short sx`, why is the following not an identity?
|
||||||
|
```c
|
||||||
|
(unsigned) sx = (unsigned) (unsigned short) sx
|
||||||
|
```
|
||||||
|
Back: `(unsigned) sx` casts size before "signedness".
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1714677608767-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
%%ANKI
|
||||||
|
Basic
|
||||||
|
What does "signedness" of a variable refer to?
|
||||||
|
Back: Whether the variable was declared `signed` or `unsigned`.
|
||||||
|
Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
<!--ID: 1714677608769-->
|
||||||
|
END%%
|
||||||
|
|
||||||
|
## Bibliography
|
||||||
|
|
||||||
|
* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.
|
||||||
|
* Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020).
|
||||||
|
|
Loading…
Reference in New Issue