09:C语言进阶篇一

C语言进阶篇一

  • 数据类型
    • 1.1、内存占用与sizeof运算符
    • 1.2、有符号数和无符号数
    • 1.3、整形数和浮点型数存储方式
    • 1.4、数据类型转换
      • 1.4.1、隐式转换
      • 1.4.2、强制转换

数据类型

基本数据类型:char,short,int,long,float,double
复合数据类型:数组,结构体,共用体,类(C语言没有类型,C++有)

1.1、内存占用与sizeof运算符

变量存储在内存中,需要占用一定的内存空间。计算机存储数据都是以补码的形式来进行存储的。一个变量占用多少空间是由变量的数据类型决定的。每种数据类型,在不同的机器平台上占用内存是不同的。我们一般讲的时候都是以32位CPU为默认硬件平台来描述:

char 		1字节		8位
short 		2字节		16位
int 		4字节		32位
long 		4字节		32位
float 		4字节		
double		8字节

1.2、有符号数和无符号数

1、对于char short int long等整形类型的数,都分有符号有无符号数。
2、而对于float和double这种浮点型数来说,只有有符号数,没有无符号数。
3、对于有符号数和无符号数来说,存储方式不同的。譬如对于char来说unsigned char无符号数,8位(1字节)全部用来存数的内容 ,而无符号数的补码就是原码。所以表示的数的范围是0(补码:为0000 0000) ~ 255(补码为:1111 1111)
4、signed char表示有符号数,8位中最高位用来存符号(0表示正数,1表示负数),剩余的7位用来存数据。所以可以表示的数的范围是 -128~127(补码为:0111 1111)。==对于正数,补码和原码相同。-128(补码是1 1000 0000)。但是是8位,所以最前面的那个1溢出了,直接丢弃。

1.3、整形数和浮点型数存储方式

对于float和double这种浮点类型的数,它在内存中的存储方式和整形数不一样。所以float和int相比,虽然都是4字节,但是在内存中存储的方式完全不同。所以同一个4字节的内存,如果存储时是按照int存放的,取的时候一定要按照int型方式去取。如果存的时候和取的时候理解的方式不同,那数据就完全错了。

#include <stdio.h>int main(void)
{int a = 123;printf("%f\n",a);//将int类型以float形式取出来进行输出。return 0;
}

0.000000

总结:存取方式上主要有两种,一种是整形一种是浮点型,这两种存取方式完全不同,没有任何关联,所以是绝对不能随意改变一个变量的存取方式。在整形和浮点型之内,譬如说4种整形char、short、int、long只是范围大小不同而已,存储方式是一模一样的。float和double存储原理是相同的,方式上有差异,导致了能表示的浮点型的范围和精度不同。

#include <stdio.h>int main(void)
{int a = 123;float b = a;	//将a里面的数取出来以float形式存储printf("%f\n",b);return 0;
}

123.000000

1.4、数据类型转换

不同类型的数据进行运算时,需要转化为同一类型,才进行运算。

1.4.1、隐式转换

代码①:

#include <stdio.h>int main(void)
{int a = 3;float b = 3.5;printf("a+b = %f\n",a+b);printf("a+b = %d\n",a+b);printf("a = %f\n",a);printf("a = %d\n",a);return 0;
}

a+b = 6.500000
a+b = 0
a = 0.000000
a = 3

  • 由输出可知:int类型和float类型进行运算时,运算的过程中int类型a会自动转换为float类型的临时变量f1,然后l临时变量f1在和float类型b进行运算。生成一个临时变量float类型f2,最后由%f取出进行输出
  • 由printf(“a = %f\n”,a);可以得出,int类型a转换为临时float类型f1。其实是将a变量里面的值取出来,放在一个float类型的变量中,而a中的变量还是int类型。

代码②:

#include <stdio.h>int main(void)
{int a = 3;float b = 3.5;int c;c = a+b;printf("c =  %d\n",c);return 0;
}

c = 6

  • 由输出可知:int类型a先转换为float临时变量f1,然后在和float变量b进行运算,生成一个临时变量f2。将这个临时变量f2的值取出来赋给int类型的变量c,最后由%d取出进行输出

1.4.2、强制转换

#include <stdio.h>int main(void)
{int a = 3;float b = 3.5;printf("a+b=%d\n",(int)(a+b));return 0;
}

a+b=6

  • a+b运算生成的本来是float类型的临时变量f2,然后通过强制类型转换为int类型,最后由%d取出进行输出

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

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

相关文章

什么是RLHF(基于人类反馈的强化学习)?

什么是RLHF&#xff08;基于人类反馈的强化学习&#xff09;&#xff1f; 基于人类反馈的强化学习&#xff08;Reinforcement Learning from Human Feedback, RLHF&#xff09;是一种结合强化学习和人类反馈的技术&#xff0c;用于训练智能体&#xff0c;使其行为更符合人类期…

哪些类型的工作需要六西格玛绿带培训?

一、六西格玛绿带是什么&#xff1f; 首先&#xff0c;让我们来了解一下六西格玛绿带。六西格玛绿带是六西格玛管理体系中的一个重要角色&#xff0c;他们通常负责在项目中执行六西格玛方法和工具&#xff0c;协助黑带完成复杂的项目任务。绿带需要掌握基本的六西格玛知识和技…

OpenJudge | 最高的分数

目录 描述输入输出样例输入样例输出思路方法一方法二 CodeCC 总时间限制: 1000ms 内存限制: 65536kB 描述 孙老师讲授的《计算概论》这门课期中考试刚刚结束&#xff0c;他想知道考试中取得的最高分数。因为人数比较多&#xff0c;他觉得这件事情交给计算机来做比较方便。你能…

萝卜快跑:未来出行的双刃剑

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在这个日新月异的科技时代&#xff0c;无人驾驶技术正以前所未有的速度改变着我们的出行方式。萝卜快跑&#xff0c;作为自动驾驶出租车领域的佼佼者&#xff0c;其出现无疑为城市交通注入了新的活力&#xff…

如何在在system_real_robot.launch修改订阅的雷达

在 system_real_robot.launch 文件中修改订阅的雷达,以使用开源 SLAM 包(如 FastLIO 和 TARE)输出的优化后雷达话题。可以让你的系统使用这些 SLAM 包提供的高精度雷达数据。 假设你的 Launch 文件中包括这一行: xml <param name="registeredScanTopic" ty…

Kylin系列(六)查询优化:提升 Kylin 查询性能

目录 1. Kylin查询优化的基础知识 1.1 Kylin的架构概述 1.2 Cube的构建与存储 2. 索引设计与优化 2.1 选择适当的维度和度量 2.2 使用层级维度 2.3 使用字典编码 3. 查询改写与优化 3.1 选择合适的查询语法 3.2 避免不必要的计算 3.3 使用过滤条件 4. Cube设计优化…

政企单位光纤资源高效管理与优化策略

引言 随着信息技术的飞速发展&#xff0c;政企单位对于通信基础设施的管理要求日益提高。然而&#xff0c;传统的管理模式&#xff0c;如Excel表格记录和纸质审批流程&#xff0c;已难以满足当前复杂多变的业务需求。在此背景下&#xff0c;我们实施了光纤管理的数字化转型项目…

双栈实现一个队列

两个栈可实现将列表倒序&#xff1a;设有含三个元素的栈 A [1,2,3] 和空栈 B [] 。若循环执行 A 元素出栈并添加入栈 B &#xff0c;直到栈 A 为空&#xff0c;则 A [] , B [3,2,1] &#xff0c;即栈 B 元素为栈 A 元素倒序。 利用栈 B 删除队首元素&#xff1a;倒序后&am…

自定义异步线程服务

异步线程池配置&#xff1a; /*** 启动异步线程-并配置线程池*/ Configuration EnableAsync public class AsyncConfig {Bean(name "taskExecutor")public Executor taskExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setC…

玩转springboot之SpringBoot单元测试

SpringBoot单元测试 spring单元测试 之前在spring项目中使用单元测试时是使用注解RunWith(SpringJUnit4ClassRunner.class)来进行的 RunWith(SpringJUnit4ClassRunner.class)// 通过自动织入从应用程序上下文向测试本身注入beanWebAppConfiguration // 指定web环境ContextConfi…

电商出海第一步,云手机或成重要因素

电商出海第一步并非易事&#xff0c;挑战和机遇并存&#xff0c;出海企业或个人或将借助云手机从而达成商业部署全球化的目的&#xff1b; 下面我们从网络稳定、数据安全、成本、以及多平台适配方面来看&#xff0c;究竟为什么说云手机会成为出海的重要因素&#xff1b; 首先…

新手前端系列入门-什么是前端开发

一、什么是前端 前端&#xff0c;也称为前端开发或客户端开发&#xff0c;一般是指在构建网站或Web应用程序时&#xff0c;与用户直接交互的部分。就是指那些我们在网页上能看到、能直接跟用户打交道的部分。 简单来说&#xff0c;就是你打开一个网站&#xff0c;能看到的所有…

西门子大手笔又买一家公司,2024年“两买”和“两卖”的背后……

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 更多的海量【智能制造】相关资料&#xff0c;请到智能制造online知识星球自行下载。 今年&#xff0c;这家全球工业巨头不仅精准出击&#xff0c…

第4章 引擎提供的着色器工具函数和数据结构

4.1 UnityShaderVariables.cginc文件中的着色器常量和函数 4.1.1 进行变换操作用的矩阵 1.判断USING DIRECTIONAL LIGTH宏是否定义并分析与立体渲染相关的宏 立体多例化渲染技术的核心思想是一次向渲染管道上提交两份待渲染的几何体数据&#xff0c;减少绘制调用&#xff08;d…

【信创国产化】Nacos 2.3.2连接达梦数据库

JeecgBoot 目前提供的nacos版本号 2.3.2已经支持与达梦数据库对接。 jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos项目默认加入了达梦驱动和yml配置。如果你是老代码&#xff0c;可以参考下面的步骤手工集成 项目地址&#xff1a;https://github.com/jeecgboot/JeecgBoot…

Anaconda 安装与基本使用总结

最近需要在服务器上安装和使用aconada&#xff0c;发现之前总是在网上找教程&#xff0c;每次都要找&#xff0c;很麻烦。这次就自己写一个安装笔记。以备日后使用。 1.服务器系统版本 ubuntu22.04 2. 软件安装 aconda软件的安装可以下面的教程&#xff08;实测有效&#xf…

斐波那契查找算法

斐波那契查找原理&#xff0c;仅仅改变了中间结点(mid)的位置&#xff0c;mid不再是中间或插值得到,而是位于黄金分割点附近&#xff0c;即midlowF(k-1)-1(F代表斐波那契数列) F[k]F[k-1]F[k-2],>(F[k]-1) (F[k-1]-1)(F[k-2]-1)1 说明:只要顺序表的长度为F[k]-1,则可以将该…

arm64架构kvm情景分析 - type1型和type2型虚拟机管理器

内核版本&#xff1a;linux-v5.9 架构&#xff1a;arm64 1 type1型和type2虚拟机管理器 在arm64架构中&#xff0c;共有EL3到EL0四个异常级别&#xff0c;EL3异常级别最高。通常操作系统&#xff08;如linux&#xff09;运行在EL1&#xff0c;应用程序运行在EL0&#xff0c;EL…

Apache中使用CGI

Apache24 使用Visual Studio 2022 // CGI2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdio.h> #include <stdlib.h>#include <stdio.h>void main() {//设置HTML语言printf("Content-type:text/html\n\n&q…

柯桥外语学校【韩语干货】“-고 있다” VS “-아/어/여 있다”

01 相同点 都可以用于动词之后&#xff0c;且形式有相似之处。 &#xff08;1&#xff09;민호 씨는 전화를 하고 있습니다. 敏镐正在打电话。 &#xff08;2&#xff09;황민 씨는 영어를 공부하고 있습니다. 黄珉正在学习英语。 &#xff08;3&#xff09;그 사람이 문 …