CS-APP CP2 信息的表示和处理
来源:互联网 发布:大富豪3.5源码下载 编辑:程序博客网 时间:2024/06/08 02:12
CS:APP CP2 信息的表示和处理
数据的机器表示
- 大端法: 高位在前
- 小段法: 低位在前
C语言的移位操作
- 左移:直接左移右边补0
- 算数右移:右移时左边补最高位
- 逻辑右移:右移时左边补0
数据的三种码表示
原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
原码是人脑最容易理解和计算的表示方式.反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
C语言类型转换
C语言强制类型转换是改变了解释数字的位的解释方式,真实的位表示没有变化
当把 x
强制从int
转换成short
时,将高位截断。
整型运算与溢出
参考此篇文章
移位运算表示的乘除
乘以常数
例如要表示x∗m - 当
m=2k 时,等价于x << k
- 当
m 无法用2k 来表示时,如m=14 , 可以将 14表示成14=24−21 ,此时用移位运算表示为(x << 4) - (x << 1)
(乘法运算可能导致溢出,但即使溢出,移位运算与表达式求值结果也是相同的)
- 当
除以2的幂
除法不同于乘法,不能用移位运算表示任意常数的除法,只能除以2的幂- 当x > 0 或者为无符号数时,
x/2k =x >> 2
- 当x < 0,由于移位除法统一向下取整,而实际上x为负数时除法是向上取整,所以有
x/2k =(x + (1 << k) - 1) >> k
。
解释:对于任意整数x
和任意y > 0
,有⌈x/y⌉ =⌊(x+y−1)/y⌋ .
- 当x > 0 或者为无符号数时,
0 0
- CS-APP CP2 信息的表示和处理
- 信息的表示和处理
- 信息的表示和处理
- 信息的表示和处理
- 信息的表示和处理
- 信息的表示和处理
- 信息的表示和处理
- 信息的表示和处理
- chap2:信息的表示和处理
- 第二章 信息的表示和处理
- 第二章.《信息的表示和处理》
- Chapter 2 信息的表示和处理
- CSAPP -- 信息的表示和处理
- 信息的表示和处理(待补充)
- 信息的表示和处理·二
- 第二章 信息的表示和处理
- 2章 信息的表示和处理
- [CSAPP]信息的表示和处理
- 高精度除法并计算除余数(综合高精减法和加法)
- Linux下 php环境安装、配置composer,使用composer安装laravel、zan等框架
- Java小白的奋斗之旅:文件搜索器
- Mysql 时间格式默认空串 '0000-00-00 00:00:00' select抛出异常的解决方法
- User-Agent-Switcher和fiddler
- CS-APP CP2 信息的表示和处理
- 系统时钟总结和带中断函数的程序的编写步骤
- 数组与字符串互转
- linux下赋予文件夹下所有文件权限
- 我研制的操盘机器人在线直播操盘演示视频
- 所有四阶幻方
- 纯虚函数
- notepad++ 使用
- iOS 带缓存,带网络监控的数据请求