1、数字表示
Ø 无符号编码(unsigned)基于传统的二进制表示法,表示大于或者等于零的数字。
Ø 补码编码(two’s-complement)表示有符号整数,可以为正负。
Ø 浮点数编码(floating-point)表示实数的科学计数法的以2为基数版本。
计算机的表示法是用有限数量的位来对一个数字编码。当结果太大以至于不能表示时就会溢出(overflow)。
2、信息存储
(1)十六进制表示法
hexadecimal简写hex,以0X/0x开头
一个字节由8位组成。0---255
二进制、十六进制、十进制之间的转换。
(2)字长
指明长整数和指针数据的标称大小。每台计算机都有一个字长(word size).
计算机32位、64位。w位字长,w=32、w=64。
(3)数据大小
数据类型的准确字节数依赖于机器和编译器。
图 C语言中数字数据类型的字节(byte)数
C声明 |
32位机器 |
64位机器 |
char |
1 |
1 |
short int |
2 |
2 |
int |
4 |
4 |
long int |
4 |
8 |
long long int |
8 |
8 |
char *(指针使用机器的全字长) |
4 |
8 |
float |
4 |
4 |
double |
8 |
8 |
(4)寻址和字节顺序
多字节对象都被存储为连续的字节序列,对象的地址为所使用字节序列中最小的地址。
两种字节顺序:
Ø 大端法
Ø 小端法
强制类型转换(cast),大多数应用编程都强烈不推荐这种编码技巧,但对于系统级编程是非常有用的,甚至是必需的。
typedef命名数据类型,能极大地改善代码的可读性。
(5)表示字符串
C语言中,字符串被编码为一个以null字符(其值为0)结尾的字符数组。
使用ASCII码作为字符码的任何系统上都将得到相同的结果,与字节顺序和字大小规则无关。文本数据比二进制数据具有更强的平台独立性。
(6)表示代码
在不同的操作系统上,不同的编码规则,二进制代码是不兼容的。
从机器的角度来看,程序仅仅是字节序列。
(7)布尔代数
或(|)、与(&)、非(~)、异或(^)
(8)C语言中的位级运算
C支持按位布尔运算
或(|)与(&)非(~)异或(^)
(9)C语言中的逻辑运算
OR(||)、AND(&&)、NOT(!)
(10)C语言中的移位运算
左移<<:x向左移K位,丢弃最高的K位,并在右端补K个0。
逻辑右移>>:x向右移K位,左端补K个0。
算术右移>>:x向右移K位,左端补K个最高有效位的值。
3、整数表示
4、整数运算
5、浮点数