csapp 信息的表示和处理

本文深入探讨了信息的表示和处理,包括信息的存储(大端和小端模式)、数值的表示(有符号数和无符号数的补码表示及最大最小值)、整数运算(加减法及其溢出情况)以及浮点数的表示(规格化数、非规格化数、无穷大等)。同时,介绍了不同类型的数值转换和浮点数的舍入方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信息的表示和处理

信息的存储

  • 数据按字节的形式存储,实际运算时按字(数据总线的条数)进行存取。
  • 大端指的是数据的低字节部分存储在高地址
  • 小端指的是数据的高字节部分存储在低地址
    在这里插入图片描述
  • 对于0x01234567 大端模式的低地址存储的值是【0x12】,小端模式的搞地质存储的值是【0x67】
  • C++测试大小端的简单方法:

在这里插入图片描述

  • C语言的按位操作和逻辑运算不同,逻辑运算的结果只有0和1
  • C语言的移位操作
无符号数 +正数有符号数(负数)
左移向左移动,末尾补0向左移动,末尾补0
右移向右移动,高位补0向右移动,高位补1

数值的表示

  • 有符号数用补码表示,无符号数没有符号位,直接表示数值
  • 补码的最高位(第w位)的权重为 - 2w,无符号的权重为 2w

正数的补码=原码 =反码【正数的补码最高位权重为0*(-2w)=0】
[+5]原/反/补=【0101】(此处0是符号位表示正数)
负数的补码=反码(=原码每位取反)+1
[-5]=【1011】(此处1是符号位表示负数)
[-5]=【1010】(此处1是符号位表示负数)
[-5]=【1101】(把+5的符号位变反)
在这里插入图片描述

  • 有符号数与无符号数的最大最小值
    在这里插入图片描述
    无符号数的最小值永远为0,无符号数为【1000…0】
    在这里插入图片描述

  • 有符号数与无符号数的扩充位

有符号数和正数都是高位扩充0
负数高位扩充1

  • 有符号数与无符号数的截断

无符号数截断k位,相当于原数mod2k,去掉后面k位即可
有符号数截断k位,相当于原数mod2k,去掉后面k位,得到的数进行有符号的表示

  • 有符号数与无符号数的转换

有符号数转无符号数时,不需变换二进制,只需要原来的有符号数的二进制表示的数的最高位权重变为2w,相当于有符号为负数,整个数值加上2w
无符号数转有符号数时,符号位为1的数,整个数值减去2w

  • 特别-1的补码表示是全1,全1也是无符号数的最大值

整数的运算

1.无符号数相加的溢出

在这里插入图片描述

example:
在这里插入图片描述

2.有符号数相加的溢出

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

3.减法

y-(x) = y+(-x)

无符号数的减法,利用溢出求相反数

在这里插入图片描述

有符号数的减法

在这里插入图片描述

乘法(可用向左移位和加减法代替)

在这里插入图片描述

浮点数的表示

1.规格化数

在这里插入图片描述

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

2.非规格化数

E=0 ===》s为0表示+0,s为1表示负0

3.无穷大的数

E=255,尾数为0 ====》s为0表示正无穷大,s为1表示负无穷小
E=255,尾数不为0 ===》不是一个数

4、int类型转float类型

在这里插入图片描述

舍入方法

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

向零舍入:直接舍弃小数部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值