IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言基础知识入门 -> 正文阅读

[C++知识库]C语言基础知识入门

学习目标:

学习数据在内存中的存储:


学习内容:

1、数据类型

1.1

char? //字符数据类型? ? ?1字节

int? ? ///整型数据类型? ? ? 4个字节

short? ?//短整型? ? ? ? ? ? ? ? 2字节

long int? //长整型? ? ? ? ? ? ? ? >=4字节

long long int? //更长的整型? ? ? ? 8字节

float? ? //单精度浮点数? ? ? ? 4字节

double? ? ?//双精度浮点数? ? ? ? 8字节?

数据类型决定了开辟内存的大小;

整型中:

unsigned int? ? ?//无符号的int? ? ? 有些数据是没有负数的

char? ? ?signed char? ? //有时默认两者是一样的

unsinged char? ? ? ?//char也是整型

long? int

long long int

浮点数:

float

double

自定义类型:

数组? ?

结构体? ?struct

枚举? ? ? ? ? ?enum

联合? ? ? ? ? union

指针类型:

char*? p1? ? ? 字符指针

int*? ? p2? ? ?整型指针

float*? ? pf? ? ? ?单精度指针

double*? pf2? ?双精度指针

空类型:

void

主要用于函数的返回值,函数的参数,以及指针

2.整型在内存中的存储

int? a =10;

int b = -10;

a,b在内存中是以二进制存储的,且存放的是整型的补码

一个整型4字节32比特位

        int a = 10;
		int b = -10;
		//00000000000000000000000000001010    原码
		//00000000000000000000000000001010    反码
		//00000000000000000000000000001010    补码
		//正数的  原 反 补 是相同的

		//10000000000000000000000000001010    原码
		//11111111111111111111111111110101    反码
		//11111111111111111111111111111010	  补码
		//负数在内存中是以补码的方式存储的
		//原符号位不变,其他位按位取反得到反码
		//反码+1  得到补码

原码和补码之间的转换:

3.大小端字节序

当我们把ox11223344这样一个16进制数存在内存中时可以顺序,也可以逆序

? ? ? ? ? 11 22 33 44? ? ? ? ? ? ? ? ? ? ? ? 也可? 44 33 22 11?

? ? ? ? ??高?<——低

两种存放方式

介绍以及判断

?一个小试题:

? ? ? ? ? ? ? ?设计一个小程序来判断当前机器的字节序。?

void pd(int a)
{
?? ?if (1==(*(char*)&a))? ? ? ? ? ? ? ?
?? ?{
?? ??? ?printf("小端\n");
?? ?}
?? ?else
?? ??? ?printf("大端\n");
}
int main()
{
?? ?int a = 1;
?? ?pd(a);

?? ?return 0;
}

解析:

1的二进制

00000000000000000000000000000001

我们取出1的地址只用判断一位,因此强制转换为(char*)使他指向一个二进制位,正在解引用找到最低地址存放的数字?

如果是小端,则最低位存放的是1

如果是大端,则最低位存放的是0

4.浮点数在内存中的存储解析

先看一例子:

我们可以发现,同一个数存储为不同类型时,输出的大小不一样。

浮点数的存储方式:

?????????(-1)^S * M * 2^E

其中S是0或者1,0是正数,1是负数

M表示有效数字,大于0小于1的数

E表示指数位

比如十进制的5.0写成二进制位? 101.0 也即是? 1.01

其中按照:(-1)^0*1.01*2^2

S==0;M ==1.01;E==2

在内存中是这样存储的

?

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。

IEEE 754规定

因为M总是1开头,所以存储时是省去了的、只需要存? .0101?,取出时在加上1

这样可以让有效数字多一个存储空间

i

E是非负的,因此防止出现负数

float存时加上127

doubl存储时加上1023

如? 2^10? E为10,存储时加上127,实际存的是137;

将存进去的数取出来:

当E不全为0和不全为1时

比如00.5的二进制为? ?0.1? 也就是? 1.0*2^(-1)??

S==0;M==1.0;E== -1;

E=E+127? ——> E=126;

0? 01111110 0000000000000

当E 全为0时

E= -127

2^(-127)接近于0

当E 全为1时

E=2^128? 是一个很大的数

现在来解释前面的例题

n=9.0;

强制转换为float型时

00000000000000000000000000001001? 原本是这样存的

取出来时

S=0;E=? -126;M=0.0000000000000000000000001001

M*2^(-126)接近于0

9.0是1001.0也即是1.001

存在内存中是

0 10000010?00100000000000000000000

转化为整型后

就是

0 10000010?00100000000000000000000

也就是

1091567616

结束


?

学习时间:

二零二二年九月十八日


学习产出:

  • 技术笔记 2 遍
  • CSDN 技术博客 1?篇
  • 习的 vlog 视频 1 个
  • 作业题10+
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:08:17  更:2022-09-21 00:11:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:08:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码