CSAPP学习——信息的表示和处理

1.整数的计算机运算满足真正整数运算的结合律和交换律,因为计算机对整数的表示是严格精确的,但是浮点数由于表示的精度有限,浮点运算是不可结合的。如

(3.14+1e20)-1e20  //值是0
3.14+(1e20-1e20)  //值是3.14

2.机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都由一个唯一 的数字来标识,称为它的地址,所有可能地址的集合就称为虚拟地址空间。
3.C编译器把每个指针和类型信息联系起来,根据指针值的类型,生成不同的机器级代码来访问存储在指针所指向位置处的值。尽管C编译器维护着这个类型信息,但实际生成的机器级程序并不包含关于数据类型的信息。
4.我们将程序称为"32位程序"或"64位程序"时,区别在于该程序是如何编译的,而不是其运行的机器类型
5.大端和小端
大端法:最高有效字节在最前面的方式
小端法:最低有效字节在最前面的方式
在这里插入图片描述
6.字节顺序的影响
(1)不同类型的机器之间通过网络传送二进制数据时
(2)当检查机器级程序,阅读表示整数数据的字节序列时
(3)当编写规避正常的类型系统的程序时,如强制类型转换或联合
7.不用移动元素来交换它们的值(智力游戏)
在这里插入图片描述
8.移位运算:几乎所有的编译器/机器组合都对有符号数使用算数移位,对无符号数,右移必须是逻辑的。
Java中明确规定,表达式 x>>k 会将x算术右移k个位置,而 x>>>k 会对x做逻辑右移
在许多机器上,当移动一个w位的值时,移位指令只考虑位移量的低log2w 位,实际上位移量是通过计算 k mod w 得到的
9.C/C++ 都支持有符号(默认)和无符号数,Java只支持有符号数
10.无符号数编码、补码编码
在这里插入图片描述
在这里插入图片描述
11.C语言中有符号数和无符号数强制类型转换的结果保持位值不变,只是改变了解释这些位的方式
补码转换为无符号数
在这里插入图片描述
在这里插入图片描述
无符号数转换为补码
在这里插入图片描述
在这里插入图片描述
当用printf输出数值时,分别用指示符%d %u %x 以有符号十进制、无符号十进制和十六进制格式输出一个数字
C语言执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号参数

-1 < 0U      //假
2147483647U > -2147483647-1    //假
2147483647 > (int)2147483648U  //真

C标准规定:从short强转为unsigned类型时,先改变大小再完成从有符号数到无符号数的转换。
12.截断数字
在这里插入图片描述
13.整数运算
无符号数加法
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
补码加法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
14.IEEE浮点表示
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值