编程语言
首页 > 编程语言> > CSAPP学习笔记2——程序执行和结构

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

作者:互联网

1.进制

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

在这里插入图片描述

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.补码

B2T(1011) =  -1*2^3 + 1* 2^1 + 1* 2^0 = -5   #  1011为补码, -5 为十进制值

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):

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

7.整数的运算

1.无符号数相加

8.浮点数的表示

在这里插入图片描述

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