ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

CSAPP学习笔记2——程序执行和结构

2021-06-28 15:31:37  阅读:189  来源: 互联网

标签:CSAPP 字节 符号 int 补码 笔记 程序执行 地址 0x100


1.进制

在C中,以0x或0X开头的数字常量被认为是十六进制的值。例如,我们可以将数字FA1D37B(16)写作0xFA1D37B,或者0xfald37b。

在这里插入图片描述

2.字

  • 每台计算机都有一个字长( word size),指明整数和指针数据的标称大小( nominal size)。
  • 因为虚拟地址是以这样的字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为n位的机器而言,虚拟地址的范围为0~2"-1,程序最多访问2"字节。

3.类型所占字节的大小

4.声明指针

对于任何数据类型T,声明T* p; 表明p是一个指针变量。指向类型T的一个对象。例如char * p;就将一个指针声明为指向char类型的一个对象。

5.寻址和字节顺序

对于跨越多字节的程序对象,我们必须建立两个规则。

  1. 这个对象的地址是什么

  2. 我们在存储器中如何对这些字节排序。

在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节序列中最小的地址。

例如,假设一个类型为int的变量x的地址为0x100,也就是说,地址表达式 &x 的值为0x100。那么,x的四字节将被存储在存储器的0x100、0x101、0x102和0x103位置。

字节顺序

某些机器选择在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高有效字节到最低有效字节的顺序存储。前一种规则一一最低有效字节在最前面的方式被称为小端法(little endian)。后一种称为大端法。

示例

假设x类型为int,位于地址0x100处,有一个十六进制值为0x01234567。地址范围0x100~0x103的字节顺序依赖于机器的类型:

在这里插入图片描述

6.整数的表示(重要)

1.位运算

  • 如果进行位运算的值大于机器字长,一般对其进行取模运算后,在进行位运算。
无符号数有符号数
左移逻辑左移(直接补0)逻辑左移
右移逻辑右移算术右移(补位的数 和最高位相同

2.补码

  • 尽管c语言中没有明确表示,但是一般 用补码来表示 有符号整数。
  • 补码可以直接得到十进制整数,不用转换成源码。
B2T(1011) =  -1*2^3 + 1* 2^1 + 1* 2^0 = -5   #  1011为补码, -5 为十进制值
  • 易错点: -1 的补码表示法为 11111111(8进制),不少人会写错位 10000001。

3. 有符号数转换成无符号数(T2U)

  • 二进制的位模式不变,但是解释这些位模式的方式变了。
    在这里插入图片描述

4.无符号数转化为有符号数(U2T)

在c语言中,无符号数和有符号数进行运算时,会隐式的将有符号数转换成无符号数。

# include<stdio.h>
int main(){
	int a=-1;
	unsigned int b=0;
	if (a<b)
	  printf("-1<0");
	else
	  printf("-1>0"); 
} 
  • 结果如图

image-20210628101327821

5.数据类型转换

当从一个较小的数据类型转换为较大的数据类型(如short ——int):

  • 无符号数补 0 即可。
  • 有符号数 补 符号位即可。

当从一个较大的数据类型转换为较小的数据类型(如int ——short):

  • 无符号数 截取k位, 可以对 剩余的k位 取模,得到结果。最下边是类比十进制的。
    在这里插入图片描述

  • 有符号数 1. 先通过截断无符号数的方式截断有符号数,再将无符号数转换为有符号数。
    在这里插入图片描述

7.整数的运算

1.无符号数相加

8.浮点数的表示

在这里插入图片描述

标签:CSAPP,字节,符号,int,补码,笔记,程序执行,地址,0x100
来源: https://blog.csdn.net/love521314123/article/details/118304310

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有