C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端等介绍

文章目录

  • 前言
  • 一、数据类型的介绍
      • 类型的意义
    • 1. 类型的基本归类
      • (1). 整型家族
      • (2). 浮点数家族
      • (3). 构造类型
      • (4). 指针类型
      • (5). 空类型
  • 二、整型在内存中的存储
    • 1. 原码、反码、补码
    • 2. 大小端介绍
        • 写一个程序判断你的电脑用大端还是小端字节序排列
    • 3. 练习
  • 总结


前言

C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端介绍,以及练习


一、数据类型的介绍

char // 字符数据类型 // 1
short // 短整型 // 2
int // 整型 // 4
long // 长整型 // 4 / 8
long long // 更长的整型 // 8
float // 单精度浮点型 // 4
double // 双精度浮点型 // 8
  • long 在32位电脑上位 4 个字节, 64位电脑上 8 个字节。
  • long 在标准中只定义了 sizeof(long) >= sizeof(int)
  • long long 是 c99 定义的新的类型

类型的意义

  1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
  2. 计算机如何看待内存空间的视角,若为整型,则认为它是整数,若为浮点型,就认为浮点数。

1. 类型的基本归类

1:40

(1). 整型家族

  • char类型在内存中存储以ASCII码值的形式存储,所以也归入整型家族。
  • 除了char类型
char
unsigned char
signed char
------------------
short
unsigned short
signed short
------------------
int
unsigned int
signed int
------------------
long
unsigned long
signed long
------------------
long long
unsigned long long
signed long long
------------------
float
unsigned float
signed float
------------------
double
unsigned double
signed double

(2). 浮点数家族

- float
- double

(3). 构造类型

  • 每创建一个数组,相当于构造了一个类型。
  • 比如 int arr[10] = {0};
  • 创建的类型为 int [10] 类型。
- 数组类型
- 结构体类型 struct
- 枚举类型 enum
- 联合类型 union

(4). 指针类型

- int* pi;
- char* pc;
- float* pf;
- void* pv;

(5). 空类型

  • void 表示空类型
  • 通常应用于函数的返回值类型、函数的参数、指针类型。

二、整型在内存中的存储

1. 原码、反码、补码

  • 计算机中的整数右三种2进制表示方法即原码、反码和补码。
  • 三种表示方法均有符号位数值位两部分,符号位都是用0表示正,用1表示负
  • 数值为 正数的原码、反码、补码都相同。
  • 负整数的三种表示方法各不相同。
    • 原码: 直接将数值按照正负数的形式翻译成二进制就可以得到原码。
    • 反码: 原码符号位不变,其余位数按位取反得到反码。
    • 补码: 反码加1,得到补码。
  • 对于整数在内存中存放的是补码
  • 原因如下
  • 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;
  • 同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与源码相互转换,其运算过程是相同的,不需要额外的硬件电路。
    比如(以1-1)为例:
    cpu只有加法器,所以可以理解为 1 + (-1)
1 的原码
00000000000000000000000000000001
-1 的原码
10000000000000000000000000000001
1 + -1 
10000000000000000000000000000010 ---- 结果为-2,显然不合理
-------------------------------------------------------------
若用补码
1 的补码 (正数原码和补码相同)
00000000000000000000000000000001
-1 的原码
10000000000000000000000000000001
-1 的反码
11111111111111111111111111111110
-1 的补码
11111111111111111111111111111111
此时 1 的补码 加 -1 的补码
00000000000000000000000000000001 +
11111111111111111111111111111111
100000000000000000000000000000000
结果有33个比特位,但整型只能由32个比特位,最高位的1省去,得到0

2. 大小端介绍

  • 内存中的数据以二进制位存储,但可以以16进制显示,方便我们观察。
  • 若现在有整数的二进制序列为
  • 00010001001000100011001101000100
00010001001000100011001101000100 --- 这个为内存中的二进制位
将这个二进制位转化为16进制,方便说明
0x 11 22 33 44
见下图

在这里插入图片描述

  • 大小端排列取决于硬件。
写一个程序判断你的电脑用大端还是小端字节序排列
#include <stdio.h>
int main()
{int a = 1;int* pa = &a;char* pb = (char*)pa;if (1 == *pb){printf("小端\n");}else if(0 == *pb){printf("大端\n");}else{printf("奇怪了\n");}return 0;
}

3. 练习

// 1. 输出什么
#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 255return 0;
}
// 2.输出什么
#include <stdio.h>
int main()
{char a = -128;printf("%u\n", a);// 4294967168return 0;
}
// 3. 输出什么
#include <stdio.h>
int main()
{char a = 128;printf("%u\n", a);// 4294967168return 0;
}
// 4. 输出什么
#include <stdio.h>
int main()
{int i = -20;unsigned int j = 10;printf("%d\n", i + j); // -10return 0;
}

总结

C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端介绍,以及练习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/651229.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python系列】受保护属性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

了解时间复杂度和空间复杂度

在学习数据结构前&#xff0c;我们需要了解时间复杂度和空间复杂度的概念&#xff0c;这能够帮助我们了解数据结构。 算法效率分为时间效率和空间效率 时间复杂度 一个算法的复杂度与其执行的次数成正比。算法中执行基础操作的次数&#xff0c;为算法的时间复杂度。 我们采…

【网络安全】安全事件管理处置 — 安全事件处置思路指导

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、处理DDOS事件 1.准备工作 2.预防工作 3.检测与分析 4.限制、消除 5.证据收集 二、处理恶意代码事件 1.准备 2.预防 3.检测与分析 4.限制 5.证据收集 6.消除与恢复 …

路由器使用docker安装mysql和redis服务

路由器使用docker安装mysql和redis服务 1.先在路由器中开启docker功能 &#xff08;需要u盘 或者 移动硬盘&#xff09; 2. docker 管理地址 :http://192.168.0.1:11180/#/ 3. 拉取镜像 4. mysql容器参数设置 MYSQL_ROOT_PASSWORD 5. redis 容器设置 开发经常需要用到 &…

Check the `candidate.safety_ratings` to see if the respoe was blocked.

ValueError&#xff1a;“response.text”快速访问器仅适用于简单&#xff08;单“部分”&#xff09;文本响应。此响应不是简单的文本。请改用“result.parts”访问器或完整的“result.candidates[index].content.parts”查找。期号 #170 谷歌-双子座/生成-人工智能-python Gi…

四:物联网ARM开发

一&#xff1a;ARM体系结构概述 1&#xff1a;控制外设led灯还有一些按键这些就要用到gpio&#xff0c;采集传感器的数据需要adc进行转化数据格式&#xff0c;特殊的外设和传感器是通过特殊的协议接口去进行连接的比如一些轴传感器和主控器的连接是通过spi&#xff0c;IIC 控制…

【优秀AI项目】每日跟踪 OpenVoice ,AI快站,OpenVoice

持续更新好玩的开源AI项目或AI商业应用体验 一起来玩转AI&#xff01;&#xff01; 1 huggingface 国内镜像站&#xff1a;AI 快站 HUggingface被墙了&#xff0c;emmmmm 所以我之前玩模型的一大感觉就是 下载什么模型之类的太难受了&#xff01;服了 看到一个镜像站——…

Rabbitmq安装延迟插件rabbitmq_delayed_message_exchange失败

Docker里的Rabbitmq容器安装延迟插件rabbitmq_delayed_message_exchange失败 一启动插件Rabbitmq容器直接停止运行了 rabbitmq-plugins enable rabbitmq_delayed_message_exchange排除了版本问题和端口问题等&#xff0c;发现是虚拟机运行内存不够&#xff0c;增加虚拟机运行内…

Appium 并行测试多个设备的方法

一、前置说明 在自动化测试中&#xff0c;经常需要验证多台设备的兼容性&#xff0c;Appium可以用同一套测试运例并行测试多个设备&#xff0c;以达到验证兼容性的目的。 解决思路&#xff1a; 1. 查找已连接的所有设备&#xff1b; 2. 为每台设备启动相应的Appium Server&…

7天入门Android开发之第1天——初识Android

一、Android系统 1.Linux内核层&#xff1a; 这是安卓系统的底层&#xff0c;它提供了基本的系统功能&#xff0c;如内存管理、进程管理、驱动程序模型等。安卓系统构建在Linux内核之上&#xff0c;借助于Linux的稳定性和安全性。 2.系统运行库层&#xff1a; 这一层包括了安卓…

2.7设计模式——Proxy 代理模式(结构型)

意图 为其它对象提供一种代理以控制这个对象的访问。 结构 Proxy保存一个引用使得代理可以访问实体&#xff1b;提供一个与Subject的接口相同的接口&#xff0c;使代理可以用来替代实体&#xff1b;控制实体的存取&#xff0c;并可能负责创建和删除它&#xff1b;其他功能依赖…

2024年世界排名TOP250医院榜单发布|医学访学/博后/联培博士参考

作为医学类的访问学者、博士后及联合培养博士们&#xff0c;都希望到世界知名医院进行临床研修交流及科研学习。2024年世界最佳医院排行榜的发布为申请者提供了可选目标&#xff0c;现知识人网小编整理刊出。 近日&#xff0c;美国《新闻周刊》&#xff08;Newsweek&#xff09…