1.整形家族:
char
unsigned char
signed char
short
unsigned short(int)
signed short(int)
int
unsigned int
signed int
long
unsigned long(int)
signed long(int) 2.浮点数家族:
float
double
3.构造类型:
——数组类型
——结构体类型 struct
——枚举类型 enum
——联合类型 union
4.指针类型
5.空类型: void
一、整形在内存中的储存
对于整形来说:数据存放内存中其实存放的是补码。
原码:直接将二进制按照正负数的形式翻译成二进制就可以。
反码:将原码的符号位不变,其他位依次按位取反就可以得到了。
补码:反码+1就得到补码。
(正数的源、反、补码都相同。)
大小端介绍:
大端模式——数据的低位保存在内存的高地址中。
小端模式——数据的低位保存在内存的低地址中。
符号位填充:
无符号数,填0
有符号数,填符号位
比特位填充时,看变量自身的类型。
#include <stdio.h>
int main()
{
char a = -1;signed char b = -1; unsigned char c = -1; printf("a=%d,b=%d,c=%d",a,b,c); //-1 -1 255 return 0;}上述代码中,a,b为有符号数,输出为-1
c为无符号数,而-1在内存中的存储方式为1111 1111,换算为无符号数就是255;
#include <stdio.h>
int main()
{
char a = -128; printf("%u\n",a); //256 return 0;}上述代码中,-128在内存中储存方式为补码。
原码: 1000 0000
反码: 1111 1111
补码:1 0000 0000
(%u 无符号10进制整数)
#include <stdio.h>
int main()
{
int a = -20;
unsigned int b = 10;
printf("%d\n",a+b); //
return 0;
}上述代码中,a有符号整数:
原码:0000 0000 0000 0000 0000 0000 0001 0100
反码:1111 1111 1111 1111 1111 1111 1110 1011
补码:1111 1111 1111 1111 1111 1111 1110 1100
b为无符号整数:
补码:0000 0000 0000 0000 0000 0000 0000 1010
a+b得:
1111 1111 1111 1111 1111 1111 1111 0110
转换为十进制
二、浮点数在内存中的存储
因为任意浮点数都可以用科学记数法来表示
则任意浮点数V都可以表示为如方式:

S=0,V为正数,S=1,V为负数
M表示有效数字,大于等于1,小于2
E表示指数位

以上为32位的浮点数存储模型
所以对于浮点数的存储,就是对于S M E的存储;
至于指数E:
首先,E为一个无符号整数
因为科学记数法中的E可以为负数,所以IEEE 754规定,E的真实值需加上一个中间数;
对于8位的E,中间数为127
对于11位的E,中间数为1023
当E全为零,表示一个无限接近0的数字
当E全为1,表示一个无穷大(小)的数字
本文详细介绍了数据在内存中的存储方式,包括整形家族的补码、反码、原码表示,以及大小端模式的区别。讨论了有符号数和无符号数在内存中的符号位填充规则,并通过实例解释了整数运算过程。同时,概述了浮点数在内存中的存储模型,强调了指数位的处理方式。
1883

被折叠的 条评论
为什么被折叠?



