[C语言] 数据存储

类型意义:

        1.类型决定内存空间大小(大小决定了使用范围)

        2.如何看待内存空间的视角

类型分类

        整形

类型大小(字节)
short2
int4
long4
long8

        浮点型

类型大小(字节)
float4
double8
long double12

        构造类型

数组
结构性struct
联合union
枚举enum

         指针类型

         空类型

                void(表示空类型,无返回值)

原码、反码、补码

  •         计算机中的整形有符号数表示方法为 原码,补码,反码.
  •         均为符号位和数值位两部分,符号位都是用0表示"正",用1表示"负",首位为符号位
  •         三种表示方法各不相同
  •         无符号数 : 原码,反码,补码均相同.
  •         计算机存储的是 补码(可以将符号位和数值域统一处理,加法和减法统一处理,因为cpu只有加法器), 反码=补码-1,原码=反码按位取反,特殊的补码 10000000,原码为 -128
  • 无符号类型  unsigned    有符号  signed

原码:

        直接将二进制转按照正负数的形式 换为二进制就可以

反码

        原原码符号位不变,其他位依次按位取反即可

补码

        反码+1即可·

比如 : 

 int a=20;// 4字节 32bit

原码: 00010100(8个数表示20, 前面再加24个0)

补码,反码与 原码相同

int b=-10;//4字节 32bit

原码: 0000  1010(8个数表示10,前面加23个0,最前面符号位为1)

反码: 1111   0101(前面加23个1,最前面符号位为1)

补码: 1111(等于15)   0110(反码+1)

转换16进制位(4个2进制位转换为1个16进制位)   补码转换16进制:0x ffffff6

大小端介绍

什么是大小端:

大端(存储):  指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中

小端(存储):  指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中

低地址:   编号小的   

高地址 :  编号大的

如  0x  11 22 33 44   

地址: 由低到高

数据: 由高到低

        44为数据低位  ,  11为数据高位

        44为内存高地址  ,  11为内存低地址

大端存储:11 22 33 44(人为)

小端存储:44 33 22 11(计算机)

//判断当前字节序:

//思路: 内存以16进制存储,如果第一个字节为 相对应16进制数,就为小端存储 ,否则为大端.
//比如 int a =1;  16进制为 01 00 00 00 (小端)
//利用 char* 来 访问一个字节的内容,指针类型决定访问几个字节的数.

//代码如下:
 

int check()
{
int a=1;
return *(char* )&a;
// 取出a的地址,并把强制转换类型 为 char*(因为只需要访问字节),再解引用得到其中的数,并返回
}

int main()
{
//返回1,小端
//返回0,大端
  int ret=check_sys();
if(ret==1)
{
 printf("小端");
}
else
{
printf("大端");
}

}

例题1:

main()
{
	//数都为 -1,没赋值前补码都一致

	char a = -1;
	//原码:10000000000000000000000000000001
	//补码:11111111111111111111111111111111
	//输出为int.整形提升(按符号位补高位)
	//得补码:11111111111111111111111111111111(32)
	//为负数,原码输出还是 -1

	signed b = -1;
	//和a同理

	unsigned c = -1;
	//补码:111111111111111111111111 11111111
	//因为赋值类型为unsigned ,最高位为0,整形提升(按符号位补高位),
	//得新补码:0000000000000000000000 11111111(32)
	//此时为整数, 原反补码一致 为255
	printf("%d %d %d", a, b, c);

}

例题2:

main()

{
	//数都为 -1,没赋值前补码都一致
	char a = -128;
	//原码:100000000000000000000000 10000000
	//补码:111111111111111111111111 10000000
	//因为赋值类型为char.认为1为符号位(按符号位补高位)
	//得新补码:111111111111111111111111 10000000(32)
	//%u打印 打印十进制无符号数., 原反补码一致 为111111111111111111111111 10000000
	printf("%u", a);

}

char 分析: 

有符号 char范围 : -128------127

无符号 char范围:   0-------255

有符号字符类型范围图:

例题3: 

main()

{
	
	char a = 128;
	printf("%u", a);

	char b =- 128;
	printf("%u", b);
//输出一致
// a存不了128, 可以表示为 127+1=-128


}

 例题4:(无符号 与 有符号 计算)

    

int i=-20;
unsigned j=10;
printf("%d",i+j);

//-20的 补码
11111111 11111111 11111111 11101100 

//10的 补码
000000 0000000 0000000 00001010

结果:
11111111 1111111 11111111 11111010 补码
11111111 1111111 11111111 11110110 反码
00000000 0000000 00000000 00001001 原码  -10 

    例题5: (-1 补码 与  无符号数)

unsigned int i;
for(i=9;i>=0;i--)
{
    printf("%d",i)
}

//无限循环

//当循环到 -1 时,由于-1补码全为1, 赋值给i, i为 无符号数,修改最前面的1为0 ,将会变为一个超大的数.

例题6: (字符类型范围)

char a[1000];
int i;
for(i=0;i<1000;i++)
{
	a[i] = -1 - i;

}
printf("%d", strlen(a));

//参考上图 字符类型取值范围图,  
//当-1,-2.....到-128是,下一个数 为127,126,125.....,知道0,停止存储.
//字符类型范围 -128到127

例题7:

	unsigned char a[1000];
	int i;
	for(i=0;i<=255;i++)
	{
		printf("hello");

	}

//无符号数 取值范围 0-255 , 当i为255+1 时, 将会变为 0,从而无限循环

浮点 类型:

基础知识:

不带任何后缀的浮点型变量 默认double , 以f(F).l(L) 分别表示 float 和 long double 

float 表示 6个有效字符 , double 表示 15个 , long double 表示 18个.

浮点型 字面量,有且只有一个小数点,两侧至少一边有数字.

指数形式:

e(E)为底 为  十进制指数 如:2.87e-3  ,

以0x(0X)打头,p(P)分隔的 是以 2为底数的 16进制指数  如:0x2p3=16.0

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows下安装python3.8

一、从官网下载安装包 官网地址&#xff1a;https://www.python.org/downloads/ 华为云地址&#xff1a;https://mirrors.huaweicloud.com/python/ 第三方镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathpython/ 注意&#xff1a;从python3.8.10版本开始…

java八股文 笔记(持续更新中~)

1 Redis 2Mysql 3JVM 4java基础底层 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1.穿透 2&#xff1a;击穿 3&#xff1a;雪崩 3 33 4:双写一致 5.持久化

Vue3全家桶 - Vue3 - 【8】模板引用【ref】(访问模板引用 + v-for中的模板引用 + 组件上的ref)

模板引用【ref】 Vue3官网-模板引用&#xff1b;如果我们需要直接访问组件中的底层DOM元素&#xff0c;可使用vue提供特殊的ref属性来访问&#xff1b; 一、 访问模板引用 在视图元素上采用ref属性来设置需要访问的DOM元素&#xff1a; 该 ref 属性可采用 字符串 值的执行设…

docker-compose Install ONLYOFFICE

ONLYOFFICE 前言 ONLYOFFICE 是一款全面的协作办公软件套件,集成了文档处理、电子表格和演示文稿等功能,为团队提供了无缝协作的工作环境。其功能强大,操作简便,是各种规模和类型的团队的首选工具。 功能介绍 多人协作:ONLYOFFICE 提供实时协作功能,让团队成员可以同时…

QGIS 开发之旅一《二次开发环境搭建》

1、 安装QT 下载QT Index of /new_archive/qt 我选择的版本是 Qt5.14.2 2、安装VS2017 Downloads & Keys - Visual Studio Subscriptions。下载后选择windows通用平台开发和C 开发就可以了。 3、安装插件QT vs tools 搜索 qt vs tools&#xff0c;选择第一个安装 …

【vivado】 clock wizard 时钟IP

一、前言 MMCM和PLL是在FPGA设计中不可避免需要使用到的时钟资源&#xff0c;对于其功能及使用方法的理解是正确进行FPGA设计的前提。 二、Xilinx 时钟 IP配置 vivado中使用时钟向导(Clocking Wizard)配置时钟IP核&#xff0c;其框图如下&#xff1a; clk_in 输入时钟&#…

MachineSink - 优化阅读笔记

注&#xff1a;该优化与全局子表达式消除刚好是相反的过程&#xff0c;具体该不该做这个优化得看代价模型算出来的结果(有采样文件指导算得会更准确) 该优化过程将指令移动到后继基本块中&#xff0c;以便它们不会在不需要其结果的路径上执行。 该优化过程并非旨在替代或完全…

按键+串口发送实验

摸鱼记录 Day_15 &#xff5e;(&#xffe3;▽&#xffe3;&#xff5e;)(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e; review 前边已经学习了&#xff1a; 串口发送Vivado 串口通信(UART)------串口发送-CSDN博客 按键基于状态机的按键消抖实现-CSDN博客 1. …

CANopen转Profinet网关连接西门子PLC与变流器通讯

CANopen转Profinet网关&#xff08;XD-COPNm20&#xff09;在智能领域&#xff0c;变流器的应用非常广泛&#xff0c;变流器一般会采用CANopen协议。现场采用台达的变流器&#xff08;支持CANopen协议&#xff09;作为CANopen从站&#xff0c;S7-1500系列PLC做主站&#xff0c;…

ENVI 如何批量拆分多波段栅格

在处理遥感图像时&#xff0c;需要将多波段栅格进行拆分是很常见的需求。下面介绍一种方法&#xff0c;可以实现图像批量拆分并重命名。 打开ENVI的App Store 搜索并下载应用 在ENVI的App Store中搜索"将多波段图像拆分成多个单波段文件"&#xff0c;并下载安装。 打…

索引失效的介绍和避免方法

索引是什么 在关系数据库 中&#xff0c;索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种 存储结构 &#xff0c;它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引的作用相当于图书的目录&#xff0c;可以根据…

20240309web前端_第一周作业_完成用户注册界面

作业一&#xff1a;完成用户注册界面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…

MyBatis拦截器四种类型和自定义拦截器的使用流程

文章目录 MyBatis拦截器四种类型和自定义拦截器的使用流程一、MyBatis拦截器四种类型的详细解释&#xff1a;1. **ParameterHandler 拦截器**&#xff1a;2. **ResultSetHandler 拦截器**&#xff1a;3. **StatementHandler 拦截器**&#xff1a;4. **Interceptor Chain 拦截器…

软考高级:统计过程阶段和工作流概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的常见车型识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文深入探讨了如何应用深度学习技术开发一个先进的常见车型识别系统。该系统核心采用最新的YOLOv8算法&#xff0c;并与早期的YOLOv7、YOLOv6、YOLOv5等版本进行性能比较&#xff0c;主要评估指标包括mAP和F1 Score等。详细解析了YOLOv8的工作机制&#xff0c…

逆向案例七——中国天气质量参数搜不到加密,以及应对禁止打开开发者工具和反debuger技巧

进入相关城市数据页面&#xff0c;发现不能调试 应对方法&#xff0c;再另一个页面&#xff0c;打开开发者工具&#xff0c;选择取消停靠到单独页面 接着&#xff0c;复制链接在该页面打开。接着会遇到debugger 再debugger处打上断点&#xff0c;一律不在此处暂停。 然后点击继…

InnoDB索引优化

索引 覆盖索引 最左前缀原则 索引下推优化 如果我执行 select * from T where k between 3 and 5 这条语句&#xff08;k 是索引&#xff09;&#xff0c;需要执行几次树的搜索操作&#xff0c;会扫描多少行&#xff1f; 这条 SQL 查询语句的执行流程…

Promise其实也不难

难点图解&#xff1a;then&#xff08;&#xff09;方法 ES6学习网站&#xff1a;ES6 入门教程 解决&#xff1a;回调地狱&#xff08;回调函数中嵌套回调&#xff09; 两个特点&#xff1a; &#xff08;1&#xff09;对象的状态不受外界影响。Promise对象代表一个异步操作&…

前端精准测试简介

一&#xff0c; 前端精准测试架构介绍 今年从零开始完成了前端精准测试整体功能的开发&#xff0c;在基于istanbul插件的基础之间&#xff0c;实现覆盖率数据的采集&#xff0c;并根据服务端和移动端精准测试的整体架构&#xff0c;实现前端精准测试体系。整体架构及核心功能…

【李沐论文精读】GPT、GPT-2和GPT-3论文精读

论文&#xff1a; GPT&#xff1a;Improving Language Understanding by Generative Pre-Training GTP-2&#xff1a;Language Models are Unsupervised Multitask Learners GPT-3&#xff1a;Language Models are Few-Shot Learners 参考&#xff1a;GPT、GPT-2、GPT-3论文精读…