C语言:各数据类型在内存的存储方式1

1.数据类型介绍

类型的意义

  1. 决定了这个类型开辟内存空间的大小
  2. 如何看待内存空间的视角

整形数据类型

字符型:
char类型可以和int型进行转换
char虽然是字符类型,但字符类型存储的是ASCII码值,ASCII码是整数

类型 占用字节 比特位 状态数量 取值范围
unsigned char 1字节 8位 256(28) [0~255]
signed char 1字节 8位 256(28) [-127~128]
char 1字节 8位 256(28) [-127~128]

短整型:

类型 占用字节 比特位 状态数量 取值范围
unsigned short 2字节 16位 65536(216) [0~65535]
signed short 2字节 16位 65536(216) [-32768~32767]
short 2字节 16位 65536(216) [-32768~32767]

整型:

类型 占用字节 比特位 状态数量 取值范围
unsigned int 4字节 32位 4294967295(232) [0~232]
signed int 4字节 32位 4294967295(232) [-231~231-1]
int 4字节 32位 4294967295(232) [-231~231-1]

长整型:

类型 占用字节 比特位 状态数量 取值范围
unsigned long 4字节 32位 42949672952(232) [0~232]
signed long 4字节 32位 4294967295(232) [-231~231-1]
long 4字节 32位 4294967295(232) [-231~231-1]
long long 8字节 64位 264 [-263~263-1]

浮点数据类型

浮点型:

类型 占用字节 比特位 取值范围
float 4字节 32位 [-3.4E+38~3.4E+38]
double 8字节 32位 [-1.7E-308~1.7E+308]

构造类型

类型
数组类型(数组int arr[10]的类型是int [10])
结构体类型 struct
枚举类型 enum
联合类型 union

指针类型

类型
字符指针char*
整形指针int*
浮点型指针float*
空类型指针void*
结构体指针struct (xxx)*

空类型

viod表示空类型(无类型)
通常用于函数的返回类型,函数的参数,指针类型

C语言有没有字符串类型?

c语言没有string类型,c语言中字符串是通过字符指针来间接实现的。

2.整形在内存中的存储

2.1有符合和无符号的存储特点(仅仅是输出时这么看,转码时无视)

以short来举例
如果是unsigned short类型,则所有位都为数值位

如果是signed short或者short类型时
最高位为符号位,其他位为数值位

在这里插入图片描述
但我们不能直接去通过二进制将所存储的二进制数直接转换成十进制数字,因为计算机在存储整形时,存储的是一种叫补码的码类

2.2原码、反码、补码

计算机的整数有三种存储方式:原码、反码、补码

原码
直接将二进制按照正负数的形式翻译成二进制
反码
将原码符号位不变,其他位按位取反
补码
在反码的基础上+1

//正整数:原码反码补码都相同
//负整数:需要翻译成原码转换成反码再转成补码
//计算机在内存中只存储补码

我们通过举例来分别说明,原码反码补码
上面所描述的有无符号只有输出时看做为此,而转换原码反码补码把数字都当做有符号,此时只看数字时>0还是<0,并加符号位

1.正整数
a=10
因为a>0,所以a此时为正整数
所以a的原码反码补码都相同
第一位为符号位,因为a>0所以符号位为0
10
00000000000000000000000000001010//原码
00000000000000000000000000001010//反码
00000000000000000000000000001010//补码


2.负整数
a=-10
因为a<0,所以a此时为负整数
所以a需要翻译成原码转换成反码再转成补码
因为a<0所以符号位为1
-10
10000000000000000000000000001010//原码
111111111111111111111111111111110101//反码(符号位不变其他位按位取反)
111111111111111111111111111111110110//补码

char类型有无符号是 不缺定的,只能取决于你所使用的C语言编译器

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值