C语言:数据的内存存储

原码、反码、补码

  • 正数的原码, 反码, 补码相同

  • 负数

    • 反码通过原码取反得到

    • 补码通过反码+1得到

    • 补码+1可以得到原码

C语言中的整数在内存中存储的是补码

  • 简化运算:使用补码可以简化加法、减法和乘法等运算

  • 唯一表示:使用补码可以避免出现两个零的问题,只有一个零值。

  • 范围表示:补码能够更好地表示有符号整数的范围,因为最高位被用作符号位,其余位用于表示数值。

示列:

数值 |       原码    |       反码    |     补码

-------|---------------|---------------|-------------

   +0 | 00000000 | 00000000 | 00000000

    -0 | 10000000 | 11111111   | 00000000

   +3 | 00000011 | 00000011  | 00000011

    -3 | 10000011 | 11111100   | 11111101

从上表可以看出,原码和反码表示中存在两个零,而补码表示中只有一个零,避免了数值的重复。这使得补码更方便进行数值运算和表示范围。

大小端字节序

  • 字节序: 数据在内存中的存储方式
  • 大端: 低位字节存高地址
  • 小端: 低位字节存低地址
  • 例如: 0x12345678 --大端:0x12 0x34 0x56 0x78  -- 小端: 0x78 0x56 0x34 0x12
  • 内存中: 从左往右为低地址->高地址, 在数学中为高位->低位

判断大小端

int judge_sys() 
{
	int value = 1;
	return *(char*)(&value);// 1 : 小端  0 : 大端
}
  • 大端:00 00 00 01 小端: 01 00 00 00 我们取出1个字节判断即可

浮点数在内存中的存储

浮点数的内存存储由三个部分组成:符号位、指数位和尾数位

符号位  指数位                 尾数位
----------------------------------------
|  s  |    e    |           f           |
----------------------------------------
  • 符号位(s): 占用1个bit位, 0表示正, 1 表示负
  • 指数位(e): 占用8个bit位, 用于表示浮点数的指数部分 
    • IEEE 754标志规定E的实值要加一个中间数127(32位下), 1023(64位下)
  • 尾数位(f): 占用23个bit位, 用于表示浮点数的尾数部分.
    • IEEE 754标准规定 高位默认为1, 不显式存储
  • 示例: 8.0在内存中的存储: s = 0. e = 3(在内存中加上127), f = 0 然后转换为二进制即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值