计算机系统基础实验三---真值与机器数

程序调试与实践:数据的存储与运算---真值与机器数

整数的编码

带符号整数: char、short、int、long
无符号整数: unsigned

1.在test目录下新建manu.c,并输入以下代码
在这里插入图片描述

#include "stdio.h" 
void main( ) 
{ 
   int  ai = 100, bi = 2147483648,ci = -100; 
   unsigned  au = 100, bu = 2147483648, cu = -100;         
   printf("ai=%d,   bi=%d,  ci=%d \n", ai, bi, ci);
   printf("au=%u ,  bu=%u,  cu=%u \n", au, bu, cu); 
}

2.编译运行,并输出相应的结果
在这里插入图片描述
在这里插入图片描述
3.反汇编该文件
ai、bi、ci为非静态局部变量,执行程序时被存放在栈帧中
100, 2147483648, -100可以看做是这个程序的常数,把这些常数赋值给这些整型变量,并且放在栈帧中时,编译程序就把这些常数直接编码在机器指令中。

objdump -S manu>manu.txt

在这里插入图片描述
在这里插入图片描述
带符号整数和无符号整数的编码

真值与机器数

十进制二进制十六进制编码说明
1000110 010064H00000064H
214748364880000000H80000000H
-100-0110 0100-64H0FFFFFF9CH补码

int类型32位,4个字节

变量类型机器数真值
biint80000000H-2147483648
cuunsignedFFFFFF9CH4294967196

总结
带符号整数:补码 (符号+数值)
无符号整数:二进制编码 (数值)

浮点数的编码

1.在test目录下新建intfloat.c,并输入以下代码
在这里插入图片描述

#include "stdio.h"
void main( ) 
{ 
    int  ai = 100, bi = -100; 
    float  af = 100, bf = -100; 
    printf("ai=%d,   bi=%d \n", ai, bi ); 
    printf("af=%f ,  bf=%f \n", af, bf ); 
}

2.编译运行,使用objdump反汇编该文件
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.ai=100,af=100当所对应的机器数不相同,int类型采用的是补码的编码,float类型采用的是浮点数编码

在这里插入图片描述
在这里插入图片描述

补码编码的特点:ai和bi 都是补码的编码,对于两个相反数,它们的机器数的01序列满足“按位取反,末位加1”
浮点数的编码特点:对于两个相反数,它们机器数的01序列中,正数的符号位为0,负号的符号位为1,阶码和尾数部分一样

总结
带符号整数:采用补码的表示,如int类型(1位符号+数值)
无符号整数:二进制的表示,如unsigned int 类型(数值)
浮点数:采用IEEE 754标准,如float类型(1位符号+8位阶码+23位尾数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值