使用 Visual Studio 2019 【在更】基础 | C 语言笔记( 二 )


1个字节(byte) = 8 位(bit) 。
1 KB = 1024 byte;1 MB = 1024 KB;1 GB = 1024 MB 。
CPU 寻址时最小访问单元为 1 字节 。
数据总线每次从内存中取 8 字节 。
内存为小端模式存储 。
输出表示:
%d 表示十进制
%o 表示八进制
%x 表示十六进制
2.4.3 补码
CPU 中的处理单元:译码器、加法器、乘法器等 , 不存在减法器 。进行减法运算需要使用加法器与补码 。
例:2-5=2+(-5) , 存储 (-5) 时需要用补码表示 , 即需要将原码 5= 0005 取反后得fffa , 加 1 后得 -5= fffb 。加 2(有进位)后得到计算结果fffd 。
当最高位为 1 时 , 要得到原码才能知道fffd 的值 , 即堆其取反后加 1(也可减 1 后取反或取反后加 1 , 结果相同)得到 3 , 所以其值为 3 。
注: 中先定义的地址较大 , 微软在两个变量间设置了 8 个字节的保护空间 。
2.4.4 整型变量
整型变量包括 6 种类型 , 分别为:
注:括号表示其中的内容是可选的 。
有符号基本整型与无符号基本整型的最高位所代表的意义如下:
不同整型变量表示的整型数范围如下表 , 超出范围会发生溢出导致计算出错 。
只有整型数会产生溢出 。
注:32 位的 long 长 4 字节 , 64 位的 long 长 8 字节 。一般为 64 位(服务器) 。
例:将 short 类型的 i=32767 加 1 , 得到 -32768 。
输出:
32767 转换为二进制表示为 0 1111 , 加 1 后得到 1 0000 , 最高位为符号位 , 表示 -32768 。
-32768 的原码与补码相同 。
注:有符号类型输出时用%d(十进制)、%o(八进制)、%x(十六进制)== , 无符号类型输出时用%u , 具体如下:
2.5 浮点型数据(精度丢失) 2.5.1 浮点型常量
两种形式如下 , 常用的为指数形式:
注意:字母 e(或 E)表示 10 的幂次 , e 前底数部分必须有数字 , e 后的指数必须为整数 。
注:形如 -.1e-3 为正确写法 , 表示 -0.0001 。
2.5.2 浮点型变量
浮点数的数值范围与有效数字:
浮点型数据的组成(标准 4 字节浮点型 float):
指数部分表示 2 的幂次 , 小数部分表示输入数值的二进制表示中的小数部分 。
浮点型数据按照指数形式存储:
IEEE-754 浮点型变量存储标准(以 4.5=0 0 0000 0000 为例):
S:符号位 。S=1 时为负( ( ? 1 ) 1 (-1)^{1} (?1)1) , S=0 时为正( ( ? 1 ) 0 (-1)^{0} (?1)0) 。
E:指数部分 。十进制数输入转为二进制数 。存储前 , 指数部分都要加 127=0111 1111(IEEE-754 规定) , 因为需要表示负数 。
M:小数部分 。在二进制数小数点前保留一位(即小数点前有且只有一个 1)的前提下 , 小数点后的部分被存储在这里 。
十进制数 4.5 分为整数部分 4 与小数部分 0.5 , 二进制表示为 100.1:
使用指数形式表示为1.001 × 2 2 1.001×2^{2} 1.001×22 , 由于此处为二进制数 , 故指数为 2 的 2 次幂 。
符号位 S=0 , 指数部分 E=2 存储为 2+127=129=1000 0001 , 小数部分 M 即 001 。存入结果如上表 。
精度丢失:
数值范围
以 float 类型为例 。浮点型数据指数部分占 8 位 。
由于特殊数(1111 1111)与非规格数(0000 0000)的存在 , 指数部分最大取到 1111 1110 , 最小取到 0000 0001 。
指数的最大表示范围到?= ( 2 9 ? 2 ) ? 127 = 254 ? 127 = -0111 1111=(2^{9}-2)-127=254-127=?=(29?2)?127=254?127=127 比特 。二进制浮点数的指数部分最大到2 127 ≈ 1. e 38 2^{127}≈1. 2127≈1. , 即数值范围最大到1 0 38 10^{38} 1038;同理 , 计算2 ? 126 ≈ 1. e ? 38 2^{-126}≈1.-38 2?126≈1.?38 可得到数值范围最小到1 0 ? 38 10^{-38} 10?38 。有效数字