一、字长:虚拟地址通过一个字来编码,字长为32位,则可以标识2^32个地址空间,每个空间为一个字节,故为4G

二、字节序:当解释多个字节类型时,存在大小端字节序问题

  0x1234567,在大小端表示法下的内存模型

  

三、整数表示

  1.无符号数编码:针对整数和零

  

  2.补码编码:针对有符号数,可以为正、零或者负数(最大负数表示为100000..0,-1表示为11111...1)

  

  

  3.有符号与无符号之间的转换

  1)转换前后长度一致:位值不变,只是改变了解释方式

  2)转换后长度变长:

  • 无符号数:零扩展
  • 有符号数:符号扩展

  3)转换后长度变短:截断后依据类型解释

四、整数运算

  1.无符号加法

  

  2.补码加法:

  

  3.无符号数乘法:注意负数

  4.补码乘法:注意负数

  5.加法、减法、位级运算和移位只需要一个cycle,乘法需要10个或者更多,除法需要30个或者更多,编译器会进行优化,左移等于乘以2,右移等于除以2

五、浮点数

  1.表示

  1)定点:难以表示很大的数,如5*2^100,需要101后面跟100个0

  

  2)实际采用如下表示方法

  对于

  • 符号:单独的符号位s,s=1表示负数,s=0表示正数
  • 尾数:n位小数字段编码尾数M,单精度float中n=23,双精度double中n=52
  • 阶码:k位阶码字段编码阶码E,单精度float中k=8,双精度double中k=11

  具体解释分三种情况:规格化的、非规格化的、无穷大与NaN

六、测试大小端字节序及补码

  1.字节序:12345在ubuntu上按内存地址从小到大表示为39300000,0x3039对应12345,所以是小端表示法(低地址存放低位字节)

  2.int与float:强转后,float中部分bit位和int表示中会有对齐,因为float与int表示数值方式不同

  3.负数使用补码表示:采用小端序,值为FFFFCFC7,即为-12345的补码表示,可以通过上述补码公式验证

  输出结果:

  

#include <stdio.h>

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, int len) {
int i;
for (i = ; i < len; i++)
printf(" %.2x", start[i]);
printf("\n");
} void show_int(int x) {
show_bytes((byte_pointer) &x, sizeof(int));
} void show_float(float x) {
show_bytes((byte_pointer) &x, sizeof(float));
} void show_pointer(void *x) {
show_bytes((byte_pointer) &x, sizeof(void *));
} void test_show_bytes(int val) {
int ival = val;
float fval = (float) ival;
int *pval = &ival;
show_int(ival);
show_float(fval);
show_pointer(pval);
} int main() {
int val = ;
test_show_bytes(val);
test_show_bytes(-val);
return ;
}

CSAPP:第二章学习笔记:斗之气2段的更多相关文章

  1. AS开发实战第二章学习笔记——其他

    第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...

  2. #Spring实战第二章学习笔记————装配Bean

    Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...

  3. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  4. Day2 《机器学习》第二章学习笔记

    这一章应该算是比价了理论的一章,我有些概率论基础,不过起初有些地方还是没看多大懂.其中有些公式的定义和模型误差的推导应该还是很眼熟的,就是之前在概率论课上提过的,不过有些模糊了,当时课上学得比较浅. ...

  5. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

  6. Linux第一章第二章学习笔记

    第一章 Linux内核简介 1.1 Unix的历史 它是现存操作系统中最强大最优秀的系统. 设计简洁,在发布时提供原代码. 所有东西都被当做文件对待. Unix的内核和其他相关软件是用C语言编写而成的 ...

  7. Machine Learning In Action 第二章学习笔记: kNN算法

    本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...

  8. Thinking in Java 第二章学习笔记

    Java虽基于C++,但相比之下,Java是一种更加纯粹的面向对象程序设计语言. 在Java的世界里,几乎一切都是对象,而Java中的全部工作则是定义类,产生那些类的对象,以及发送消息给这些对象. 尽 ...

  9. Scala第二章学习笔记

    最基本的练习~: 使用伴生对象: object holder{ class Foo{ private var x = 5} object Foo{def im_in_yr_foo(f: Foo) = ...

随机推荐

  1. C#使用CefSharp碰到的坑(一)

    使用CEFSharp做模拟提交的话,在高版本下会出现一个神奇的错误: 如果站点使用的是阿里提供的验证控件的话,就是那种拖动条的,如果是使用CEFSharp的新版本的(目前我是测试过70的) ,会出现拖 ...

  2. LBS(Location Based Service)(基于位置的服务)

    LBS(Location Based Service)(基于位置的服务) Android 中定位方式基本可以分为两种:GPS定位,网络定位. GPS定位的工作原理是基于手机内置的GPS硬件直接和卫星进 ...

  3. [PA2014]Parking

    [PA2014]Parking 题目大意: 停车场是一个宽度为\(w(w\le10^9)\)的矩形.我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系.停车场很长,我们可以认为它一直向右边 ...

  4. Understanding HBase and BigTable

    Hbase is a distributed data storage systems. A Bigtable is spare , distributed , persistent multidim ...

  5. [HDU4864]Task (贪心)

    此图和上一篇博客的图一起看有奇效 题意 https://vjudge.net/problem/HDU-4864 思路 贪心 代码 by lyd 我实在是敲不来 #include <iostrea ...

  6. c#学习个人总结

    c#一门程序语言,我的专业课.有了一学期的接触对它的了解还只是皮毛,里面有许多的知识都有待了解学习和提高,熟练掌握程序的语法,能够熟练的调用,对于一些理论性的知识还需要今后更多的揣摩和研究,讲书本中的 ...

  7. JDBC API 事务的实践

    使用了持久化框架几乎没有使用过原生的jdbc API ,发现原来使用jdbc API来实现事务也是很简单的. 数据库的链接connection具有一个属性autocommit,这个属性默认是true, ...

  8. ECMA Script 6_模块加载方案 ES6 Module 模块语法_import_export

    1. 模块加载方案 commonJS 背景: 历史上,JavaScript 一直没有模块(module)体系, 无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 其他语言都有这项功能: ...

  9. 3.2station

    题意火车进入,然后要求以最大字典序输出 解题思路:先用一个数组储存当前位置之后最大的数字是什么,然后把已经进站的最后一节火车和还没进站的车的最大值,哪个更大,如果已经进站的更大,那么就先出站,否则就先 ...

  10. [LeetCode] Implement Rand10() Using Rand7() 使用Rand7()来实现Rand10()

    Given a function rand7 which generates a uniform random integer in the range 1 to 7, write a functio ...