前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言进阶:整型数据的存储

C语言进阶:整型数据的存储

作者头像
aosei
发布2024-01-23 13:19:16
2410
发布2024-01-23 13:19:16
举报
文章被收录于专栏:csdn-nagiY

一.整型数据类型介绍

short :

unsigned short[int]

signed short[int]

int :

unsigned int

signed int

long :

unsigned long[int]

signed long[int]

char :

unsigned char

signed char

因为char 类型的数据是通过ASCII值存储的,所以也属于整型家族

下表列出了关于标准整数类型的存储大小和值范围的细节:

注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。

以下列出了32位系统与64位系统的存储大小的差别(windows 相同):

二.整型的存储

数据在内存中以2进制的形式存储,对于整数来说:

1.整数的二进制有三种表示形式:原码,反码,补码。

2.正整数:原码,反码,补码相同;

3.负整数:原码,反码,补码需要计算;

4.计算方法:

按照数据的数值直接写出的二进制序列就是原码;

原码的符号位不变,其它位按位取反得到反码;

反码 + 1 得到补码

注意:数据都是以补码的形式存储的,计算时也是补码之间的运算,打印时按照原码打印。

三.整型提升

1.什么是整型提升:

C的整型算数运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的**字符和短整型操作数( char 属于整型家族 )**在使用之前被转换为普通整型,这种转换称为整型提升。

2.规则:

整型提升是按照变量的数据类型的二进制位符号来提升的,无符号数整型提升高位都补0,有符号数整型提升高位补符号位。

例:

四.算数转换

1.定义:

若某个操作符的各个操作数属于不同的类型,那么在运算时一个操作数的类型转换成另一个操作数的类型;

转换优先级:

long double > double > float >unsigned long int > long int > unsigned int > int > char

注意:转换要合理(从下到上转换),不然会有一些潜在的问题,比如精度丢失

五.大端字节序和小端字节序

1.大端字节序:把数据的低位字节序的内容存放在高地址,高位字节序的内容存放在低地址;

2.小端字节序:把数据的低位字节序的内容存放在低地址,高位字节序的内容存放在高地址;

存放在地址中是以16进制形式存放的;

什么是低位字节序,什么是低地址呢?

如图:

可以这么理解,小端字节序是倒着存放的,大端字节序是正着存放的。

我们可以写个代码来判断当前机器是以什么字节序存储的

要想知道是大端还是小端,其实只需要判断第一个字节就行了,为了使判断过程更简单,我们可以定义 int a=1; 原因如图:

代码实现:

代码语言:javascript
复制
int main()
{
	int a = 1;
	char* p = (char*)&a;  //强制类型转换成 char*
	if (*p == 1)
	{
		printf("小端\n");
	}
	else
		printf("大端\n");
	return 0;
}

六.char 类型的存储问题

首先 char 类型到底是 signed char 还是 unsigned char ,C语言标准并没有规定,这取决于编译器

1. 有符号型 char 的范围:-128 ~ 127

原因如图:

可以这么理解:

巧记口诀:

超出范围的数据如果是整数,则减去256;如果是负数,则加上256。

2.无符号型 char 的范围: 0 ~ 255

例1:

代码语言:javascript
复制
#include <stdio.h>

int main()
{
    char a=-1;
    signed char b=-1;
    unsigned char c=-1;
    printf("a=%d,b=%d,c=%d\n",a,b,c);
    return 0;
}

正解:a=-1,b=-1,c=255

a 和 b 很好理解,问题就是c,我们利用上面的巧记口诀,因为 -1 是负数,-1+256=255,所以c=255;那究竟为什么是255呢?请看下图:

例2:

代码语言:javascript
复制
#include <stdio.h>

int main()
{
    char a=-128;
    printf("%u",a);
    return 0;
}

正解:4294967168

解析:

🐋😼 本篇文章到此就结束啦,如有错误或是建议,欢迎小伙伴们指出。🦖🦄

😸😽谢谢你的阅读。😻🐼

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.整型数据类型介绍
  • 二.整型的存储
  • 三.整型提升
  • 五.大端字节序和小端字节序
  • 六.char 类型的存储问题
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档