Martian148's blog Martian148's blog
首页
  • ICPC 算法笔记
  • ICPC 算法题解
  • 体系结构
  • 高等数学
  • 线性代数
  • 概率论与数理统计
  • 具体数学
  • Martian148的奇思妙想
  • 游记
  • 通识课笔记
关于
  • useful 网站
  • 友情链接
  • 分类
  • 归档

Martian148

一只热爱文科的理科生
首页
  • ICPC 算法笔记
  • ICPC 算法题解
  • 体系结构
  • 高等数学
  • 线性代数
  • 概率论与数理统计
  • 具体数学
  • Martian148的奇思妙想
  • 游记
  • 通识课笔记
关于
  • useful 网站
  • 友情链接
  • 分类
  • 归档
  • ACM - ICPC

  • 编程语言

  • 体系结构

    • 计算机组成原理笔记
    • CS61C

    • CSAPP

      • CSAPP 学习笔记
        • 第2章 信息的表示和处理
          • 大端小端方式
          • C 语言中的位移运算
          • 有符号和无符号数
          • 扩展一个数字的表示
          • IEEE 浮点表示
          • 浮点数的舍入
  • Web

  • 人工智能

  • 计算机网络

  • 数据库

  • 编程工具

  • 计算机科学
  • 体系结构
  • CSAPP
martian148
2025-04-16
目录

CSAPP 学习笔记

# CSAPP 学习笔记

此笔记只记录一些比较重要的部分

# 第2章 信息的表示和处理

# 大端小端方式

  • 最低有效字节在最前面,叫小端法
  • 最高有效字节在最前面,叫大端法

这里有一个 xxx 的类型为 int,位于 0x100 处,十六进制值为 0x01234567

在 0x01234567,高字节为 0x01,低字节为 0x67

image-20250416102009870

# C 语言中的位移运算

这里提到一个叫 算数右移 和 逻辑右移 的区别

  • 逻辑右移会在最左端加上 000
  • 算数右移会在最左端加上最高有效位的值,在处理负数的时候有用
image-20250416110041094

在 C 语言中,几乎所有的编译器都采用算数右移

# 有符号和无符号数

对于 int 类型,对位来说是之间复制,只是解释位的方式改变了

#include <stdio.h>

int main() {
	short x = -12345;
	unsigned short ux = (unsigned short)x;
	printf("x = %d\n", x);
	printf("ux = %u\n", ux);
}
1
2
3
4
5
6
7
8

输出得到:

x = -12345
ux = 53191
1
2

可以看到 −12345-12345−12345 的 16 位补码和 531915319153191 的补码完全相同

当一个有符号数和一个无符号数进行运算时,C 语言会隐式得将有符号的参数强制转换成无符号数

# 扩展一个数字的表示

  • 将一个无符号的数转化成一个更大的类型,只需要在前面加 0,这被称为 零拓展
  • 将一个补码数字转化成一个更大的数据类型,可以执行一个 符号拓展 就是在前面添加最高有效位的值
  • 将一个数字转化成一个更小的数据类型,我们会截断前面的多的位数,所以有可能一个正数有可能会变成一个负数,因为最高位被置为 111 了

# IEEE 浮点表示

image-20250416191512007

这里有一个公式是:V=(−1)s×1.significand×2exponectV=(-1)^s\times \text{1.significand}\times 2^{\text{exponect}}V=(−1)s×1.significand×2exponect

这个是格式化的值,我们对于一些特定的 significand 和 exponect 组合,可以定义一些特殊的数

image-20250416191912968

# 浮点数的舍入

一般来说,采用一个向偶数舍入的方式,例如:2.52.52.5 舍入后是 222,3.53.53.5 舍入后是 444

在二进制表现下就是,如果后面的位刚好是 1xxx1xxx1xxx,我们倾向于让最低有效位为 000,例如 10.11100210.11100_210.111002​ 舍入到小数点后两位为 11.00211.00_211.002​,10.10100210.10100_210.101002​ 舍入到小数点后两位为 10.10210.10_210.102​

CS61C Lab3
三件套笔记

← CS61C Lab3 三件套笔记→

最近更新
01
在 ACM 集训队年会上的讲话
07-01
02
计算机网络笔记
06-13
03
LLM101 NLP学习笔记
06-02
更多文章>
Theme by Vdoing | Copyright © 2024-2025 Martian148 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式