csapp3
运算
布尔代数中的基本运算
或 |
与 &
取反 ~
异或 ^ (相同为零,不同为一)
计算时&和|的分配律存在
例:(a&b)|c 等同于 (a|c)&(b|c)
位级运算
将其他进制转换成2进制在进行运算
掩码
表达式 ~0 可以生成一个全 1 的掩码,不管机器的字大小是多少。
移位运算
左移 k 位丢掉最高的 k 位,并在右端补 k 个 0。
右移分为逻辑右移和算术右移。
逻辑右移左端补 0,算术右移左端补最高有效位的值。
一般都对有符号数使用算术右移,即补符号位的值。无符号数,只能是逻辑右移,即补 0
整数
表示:无符号表示与补码表示
(java 只支持有符号数)
数据类型
复数绝对值范围比正数大一(大于等于32位机器在有符号数上)
补码编码
定义:最高位为符号位
[0001]=-0(x)2^3 + 0(x)2^2+ 0(x)2^1+1(x)1
C 库头文件 定义了一组常量来限定不同整数数据类型的取值范围。INT_MAX、INT_MIN、UINT_MAX
C 库头文件 中定义了 uint16_t, int32_t 等类型,用于声明确定宽度类型的整数。
有符号数和无符号数之间的转换
保持位值不变,只改变解释位的方式
补码 x 转无符号数
- x >= 0,值不变
- x < 0,转换后的值为 2^w + x
无符号数 x 转补码
- x < 2^(w-1),值不变
- x >= 2^(w-1),转换后的值为 x - 2^w
c语言中
C 语言中有符号数和无符号数相加减,有符号被转换成无符号
拓展数字的位表示
扩展无符号数使用零扩展,即在最高位前加 0
扩展有符号数使用符号扩展,即在最高位前加最高有效位的值
截断数字
对一个 w 位的数字截断为一个 k 位数字,将丢弃高 w-k 位。
对于无符号数而言,截断后的数字实际上等于 w mod 2^k,即取余
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 鱼非愚!
评论