C语言(数据类型存储)

一、数据类型

C语言中的数据分为:整形和浮点型。
以下是有符号类型无符号类型能代表数据的范围:

/*整形*/
char           //signed:-2^7~2^7-1    unsigned:0~2^8-1

short          //signed:-2^15~2^15-1    unsigned:0~2^16-1
int            //signed:-2^31~2^31-1    unsigned:0~2^32-1
long           //int可以省略  signed:-2^31~2^31-1    unsigned:0~2^32-1
long long      //int可以省略  signed:-2^63~2^63-1    unsigned:0~2^64-1

/*浮点型*/
float
double
  1. char 类型是否是signed char 无明确定义,要看使用的编译器。
  2. 除了整形和浮点型,还有自定义类型,指针类型,空类型。

二、整形在内存中的存储

(一)原码、反码、补码

符号位:0表示正,1表示负。
1. 原码:按照二进制,根据正负写出。
2. 反码:正数反码和原码相同。负数符号位不变,其他位按位取反。
3. 补码:正数补码和原码相同。负数在反码基础上+1,在计算机中存储的都是补码,负数补码的补码是原码

例子5和-5:
5原码: 00000000 00000000 00000000 00000101
5反码: 00000000 00000000 00000000 00000101
5补码: 00000000 00000000 00000000 00000101

-5原码: 10000000 00000000 00000000 00000101
-5反码: 111111111 111111111 111111111 111111010
-5补码: 111111111 111111111 111111111 111111011

(二)大小端

内存中是以字节为最小单元的,当数据类型如int4个字节,就会涉及如何排列这四个字节的问题。

  1. 大端:数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中。
  2. 小端:数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中(常用)。
    可以看到在内存中,4的十六进制是0X00000004,04被保存在低地址。
    在这里插入图片描述
    编写程序验证大小端:
void test2()
{
	int a = 1;
	char* p = (char*)&a;
	*p ? printf("小端") : printf("大端");
}

三、浮点型在内存中的存储

  1. IEEE754规定:二进制浮点数可以写成(-1)S*M*2E
    5.5可以写成+101.1,即(-1)0*1.011*22
    -5.5可以写成+101.1,即(-1)1*1.011*22
  2. 32位浮点数:1位符号位S,8位指数位E,23位有效数字M。
  3. 64位浮点数:1位符号位S,11位指数位E,52位有效数字M。
  4. 对于有效位M,不存储第一位的1,对于32位浮点数,即可以保存24位有效数字,对于64位浮点数,即可以保存53位有效数字。
  5. 由于指数位E可以是负数,存入指数E的真实值会加上一个中间数,对于32位,这个中间数是28-1 -1=127,对于64位,这个中间数是211-1 -1=1023。
  6. 当E全为0,有效数字的真实值为(1-127)或(1-1023),M位也不再补1.
  7. 当E全为1时,M全为0时,表示正负无穷大(具体看符号位)。
  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值