1. 一段查看地址内容的代码

代码:

#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;
printf(" %x\n", pval);
show_int(ival);
show_float(fval);
show_pointer(pval);
} int main()
{
test_show_bytes();
}

运行结果:

 56683c18
39 30 00 00
00 e4 40 46
18 3c 68 56 ff 7f 00 00

其中函数show_int()、show_float()的调用比较好理解。

show_int()中&x取到实际地址。为使获取地址指向数据中每个字节的内容,需要进行类型转换,即把int *转换成unsigned char *,但是类型转换后已经不知道数据的长度,所以需要人工传入数据长度的参数,即 sizeof(int)。此后,把每次指针指向的内容(unsigned char形式)以十六进制形式输出;若指针是以char形式表示,则转换为十六进制时会认为有符号,所以会出现补全ffffff的情况。show_float()类似。

int *pval = &val 运行后,pval为指针,64位,其内容指向val的地址。printf(" %x\n", pval)是以十六进制形式输出地址,但是由于 %x只能表示32位,所以去掉高32位,变成 56 68 3c 18,小端模式输出后即为 18 3C 68 56

对于show_pointer函数,传递的是 int*指针,实参强制转换为void*指针,而&x转换为指向void*指针的指针,即void**指针,要访问void*指针的内容,需要void*指针的地址,即void**指针和void*指针的长度。之后情况与上面类似。

2. 问题2.27

写一个判断无符号加法是否溢出的函数

int uadd_ok(unsigned x, unsigned y)
{
unsigned sum = x + y;
return sum >= x;
}

若无溢出,则 sum >= x 恒成立

若溢出,则 sum = x + y - 2^w,由于 y < 2^w,则 sum < x

《CSAPP》读书杂记 - Chapter 2. Representing and Manipulating Information的更多相关文章

  1. chapter 2: Representing and manipulating information

    C allows conversion between unsigned and signed. The rule is that the underlying bit representation ...

  2. Chap 2 Representing and Manipulating Information (CS:APP)

    -------------------------------------------------------------------------------------------------- A ...

  3. CSAPP读书随笔之一:为什么汇编器会将call指令中的引用的初始值设置为-4

    CSAPP,即<深入理解计算机系统:程序员视角>第三版,是一本好书,但读起来确需要具备相当的基本功.而且,有的表述(中译文)还不太直白. 比如,第463页提到,(对于32位系统)为什么汇编 ...

  4. MySQL Crash Course #13# Chapter 21. Creating and Manipulating Tables

    之前 manipulate 表里的数据,现在则是 manipulate 表本身. INDEX 创建多列构成的主键 自动增长的规定 查看上一次插入的自增 id 尽量用默认值替代 NULL 外键不可以跨引 ...

  5. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  6. 【Reading Note】算法读书杂记

    1 排序 排序基本信息 稳定性:排序前大的数在排序后,大的数依然保持不变就是稳定排序,反之不稳定 内外排序:根据待排序的记录是否放在内存里面区分的.诸如:插入排序(直接插入&希尔).交换排序( ...

  7. 【Reading Note】Python读书杂记

    赋值 >>> list=[] >>> app=[list,list,list] >>> app [[], [], []] >>> ...

  8. 《OS X Mountain Lion》 读书杂记

    OS X是一个类UNIX操作系统,由底层的Darwin和上层的OS X应用程序框架(Cocoa, Carbon, Quartz等)及Aqua用户界面组成.其中Darwin是一个开源.完整的POSIX- ...

  9. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

随机推荐

  1. Android开发之自定义圆角矩形图片ImageView的实现 - Jamy Cai

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...

  2. C# 几种退出程序的方式

    C# WinForm程序退出的方法 1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application. ...

  3. android系统将普通应用升级为系统应用

    作为一名程序员,有的时候并不是使用软件,而是去改造软件,不仅仅只是会编程而已,还要满足客户的需求.这样,才能开发出符合客户需求的应用,在关于到涉及到android底层的应用的时候,手机就需要root了 ...

  4. WindowsForm 记事本 对话框

    textbox:     属性:         text:文本         selectedtext:获取或设置选中文本         canundo:是否能够撤销     方法:       ...

  5. HOOK钩子 - 钩子函数说明

    翻译参考自MaybeHelios的blog: http://blog.csdn.net/maybehelios/ 通过SetWindowsHookEx方法安装钩子,该函数指定处理拦截消息的钩子函数(回 ...

  6. 给Extjs的GridPanel增加“合计”行(转)

    再Google,找到一个看似写的比较好的 http://www.cnblogs.com/over140/archive/2009/05/06/1449892.html 期间主要部分也是借鉴官方论坛上的 ...

  7. 转 jquery插件--241个jquery插件—jquery插件大全

    241个jquery插件—jquery插件大全 jquery插件jqueryautocompleteajaxjavascriptcoldfusion jQuery由美国人John Resig创建,至今 ...

  8. jupyter巨好玩-简介与安装

    ipython notebook改名jupyter了而且更好玩更好用 jupyter简介 jupyter是啥啊? 这个要从ipython说起,ipython是个交互式的python的解释器,自带颜色, ...

  9. flex lineChart中自定义datatip

    原文 http://www.giser.net/?p=776 在Flex4中使用lineChart会遇到一个bug,datatip上的背景是黑色的,造成文字看不清楚,和整体界面不协调. 那么解决这个问 ...

  10. node.js介绍

    官网说明: Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable ...