03-数据类型、sizeof 运算符、标识符、scanf 输入

news2026/4/29 23:39:22
1. 数据类型sizeof 运算符目标会查看变量、类型占用内存大小​ 每种数据类型都有自己固定的占用内存大小和取值范围。语法 1sizeof(变量名)inta10;printf(%llu\n,sizeof(a));//sizeof(a) 获取 a 变量占用内存大小。可以用 printf 显示出来// 查看 sizeof 返回的占用内存大小需要使用 %llu 格式符语法 2sizeof(类型名)printf(%llu\n,sizeof(double));// 也可以使用 sizeof 直接查看某种类型占用的内存大小数值型整型目标选用不同类型存整数基础信息数据类型字节数格式符数据范围最小值宏最大值宏short短整型2%hd-215~ 215-1 (-32768 ~ 32767)SHRT_MINSHRT_MAXint整型4%d-231~ 231-1 (-2147483648 ~ 2147483647)INT_MININT_MAXlong长整型4%ld-231~ 231-1 (-2147483648 ~ 2147483647)LONG_MINLONG_MAXlong long长长整型8%lld-263~ 263-1LLONG_MINLLONG_MAXunsigned short无符号 短整型同 short%hu0 ~ 216-1 (0 ~ 65535)0USHRT_MAXunsigned int无符号 整型同 int%u0 ~ 232-1 (0 ~ 4294967295)0UINT_MAXunsigned long无符号 长整型同 long%lu0 ~ 232-1 (0 ~ 4294967295)0ULONG_MAXunsigned long long无符号 长长整型同 long long%llu0 ~ 264-10ULLONG_MAX上表中列出的占用字节数和取值范围是大多数情况下各种类型的取值。 由于C标准没有具体规定以上各类数据所占用的字节数。因此在不同系统、编译器下数据类型占用的字节数会有所不同。比如int 类型在 Turbo C 环境占 2 字节取值范围与 short 相同。 而在 Visual C 环境下是 4 字节。再如long 类型相同的 gcc 编译器下在 Windows 系统中占 4 字节而在 Linux 系统中占 8 字节。可以使用 sizeof 查看 数据类型 占用内存的大小。可以引入头文件#include limits.h借助宏来查看 数据类型 在当前平台上 对应的最小、最大值。#includestdio.h#includelimits.hintmain(void){printf(short 大小 %llu\n,sizeof(short));printf(short 最小值 %hd 最大值 %hd\n,SHRT_MIN,SHRT_MAX);printf(unsigned short 最小值 0 最大值 %hu\n,USHRT_MAX);printf(\n);printf(int 大小 %llu\n,sizeof(int));printf(int 最小值 %d最大值 %d\n,INT_MIN,INT_MAX);printf(unsigned int 最小值 0, 最大值 %u\n,UINT_MAX);printf(\n);printf(long 大小 %llu\n,sizeof(long));printf(long 最小值 %ld 最大值 %ld\n,LONG_MIN,LONG_MAX);printf(unsigned long 最小值 0 最大值 %lu\n,ULONG_MAX);printf(\n);printf(long long 大小 %llu\n,sizeof(longlong));printf(long long 最小值 %lld 最大值 %lld\n,LLONG_MIN,LLONG_MAX);printf(unsigned long long 最小值 0, 最大值 %llu\n,ULLONG_MAX);printf(\n);return0;}有符号数和无符号数有符号 可以表示正数和负数 无符号 只能表示正数 signed char num; 有符号数num unsigned charnum;无符号数num有符号 最高位为符号位其他位数据位 无符号全都为数据位数的范围有符号数和无符号数能够表示数的个数相同只是表示数的范围不一样char 有符号数和无符号数能够表示数的个数相同只是表示数的范围不一样signedchar10000000-11111111-0--12700000000-011111110-127规定 将-0表示成-128-128-127(-2^7-2^7-1)unsignedchar00000000-111111110-255(0-2^8-1)shortsignedshort(-2^15-2^15-1)unsignedshort(0-2^16-1)intsignedint(-2^31-2^31-1)unsignedint(0-2^32-1)bool型目标知道 bool 类型两种取值​ C语言在设计之初是没有布尔类型的使用 1 和 0对应表示真、假。​ 但其他编程语言像 C、java 都设计有布尔数类型。 C语言在1999 年推出的新标准C99中也加入了 布尔类型。用 true 来代表 1为真用 false 来代表 0为假。使用时需要引入头文件#include stdbool.h#includestdbool.hintmain(void){printf(%d, %d\n,true,false);// 1, 0return0;}​ 虽然语法上与其他语言一致但 C 语言每次在使用时需先引入头文件较为麻烦。 因此一些老 C 工程师还是喜欢直接在程序中用 1 和 0 来表示 真和假。实型目标会选用浮点型变量存小数​ 实型表示有符号的十进制小数在计算机内部以浮点方式表示小数点是浮动的因此也叫浮点型。​ 常见实型有两种float (单精度)、 double (双精度)基础信息类型字节数格式符有效数字常量后缀float (单精度)4%f6~7fdouble (双精度)8%lf15~16无我们直接书写的小数常量如 6.23系统默认看做 double 类型。如想指明为 float 类型需加后缀 f6.23f。6~7整数部分 小数部分 6 位 准确。整数部分 小数部分 7 位可能准确也可能不准确。整数部分 小数部分 7位。大多不准确。15~16整数部分 小数部分 15 位 准确。整数部分 小数部分 16 位可能准确也可能不准确整数部分 小数部分 16位。大多不准确。显示小数时%f 和 %lf 默认保留 6 位小数。 如需指定小数位数使用格式符%.nfn 为几表示精确到小数点后几位会对 n1 位做 4 舍 5 入。#includestdio.hintmain(void){floatf1.23456789101112131415f;// 定义有 20 位小数的 float 变量doubled1.23456789101112131415;// 定义有 20 位小数的 double 变量printf(f%.20f\n,f);printf(d%.20lf\n,d);return0;}字符型目标会在程序中使用字符型数据基础信息​ C 语言定义 char 类型来表示字符数据。 其本质依然是存储数值因此与数值型类似也有有符号、无符号之分。占用 1 个字节内存大小。类型字节数格式符数据范围最小值宏最大值宏char1%hhd-27~ 27-1 (-128 ~ 127)CHAR_MINCHAR_MAXunsigned char1%hhu0~28-1 (0 ~ 255)0UCHAR_MAXASCII 码char类型在程序中最常用来表示字符。其本质依然是一个数字但每个值都对应一个固定的字符共定义了128个字符。c称之为 ASCII 码 (American Standard Code for Information Interchange) 美国信息交换标准代码。ASCII值控制字符ASCII值字符ASCII值字符ASCII值字符0NUL32(space)6496、1SOH33!65A97a2STX3466B98b3ETX35#67C99c4EOT36$68D100d5ENQ37%69E101e6ACK3870F102f7BEL39‘71G103g8BS40(72H104h9HT41)73I105i10LF42*74J106j11VT4375K107k12FF44,76L108l13CR45-77M109m14SO46.78N110n15SI47/79O111o16DLE48080P112p17DCI49181Q113q18DC250282R114r19DC351383S115s20DC452484T116t21NAK53585U117u22SYN54686V118v23TB55787W119w24CAN56888X120x25EM57989Y121y26SUB58:90Z122z27ESC59;91[123{28FS6092\124|29GS6193]125}30RS6294^126~31US63?95_127DEL​ 上表中有 6 个字符对应的 ASCII 较为常见建议大家记下会为后续写代码提供很多方便。字符ASCII 码字符ASCII 码空0‘\n’10空格32048A65a97​ 需注意的是我们从键盘键入的所有内容都是字符。如键入数字 7实际是字符 ‘7’真正存储在计算机内的是 55字符 7 的 ASCII 码值而如果我们键入了 35实际上这是两个字符。真正存储在计算机内的是 51 和 53字符 3 和 字符 5 的 ASCII 码值。​ 我们可以用 printf 结合 格式符 %c显示字符。 如果用 %d就显示 其 ASCII 值了。#includestdio.hintmain(void){charch53;printf(ASCII为%d, 字符为%c\n,ch,ch);return0;}转义字符C 语言提供了一类特殊的字符是由 \ 和特定字符组合而成称之为 转义字符。他们都是一个字符如‘\n’ 这是 1 个字符。 代表 回车换行回车键。‘\t’ 也是 1 个字符。代表 制表符 Tab键。‘\b’ 同样是 1 个字符。 代表 退格符Backspace 键。‘\0’ 是一个字符。代表 空。对应 ASCII 值 0。‘\ddd’ 是一个字符。ddd 对应 3 个八进制数没有用 0 开头。 如\141 对应 ASCII 值为 97代表 ‘a’。‘\xhh’ 是一个字符。x 表十六进制hh 对应 2 个十六进制数。 如\x41 对应 ASCII 值为 65代表 ‘A’。\ 还可以在特定环境下将一个字符还原其本身意。比如现在想在 printf(“%d\n”10)输出 10 的时候用 “” 把 10 包裹住。 如果直接写 printf(“ “%d” \n”10)是会报错的。这时可以使用\将 “ 进行转义还原其本身意。printf(\%d\,10);// 这里的 \ 看做一个双引号字符。类似的还有\代表 单引号。\\代表 反斜杠。字符输入输出C 语言提供了专门的函数方便在程序中 获取、输出 字符数据。getchar()获取用户从键盘写入的一个字符。程序执行到 getchar() 会暂停等待用户键入字符数据。一次 getchar() 调用只读取一个字符。如用户键入多个字符需要多次调用 getchar()读取。函数调用完成会返回实际读到的字符 对应的 ASCII 值。用户键入字符结束敲的回车键对应‘\n’ 字符也可以使用 getchar() 读取。intretgetchar();putchar(ch)将 ch 对应的字符输出到屏幕。ch 可以是变量也可以是常量。一次 putchar() 调用只写出一个字符不含换行符 ‘\n’。函数调用完成会返回实际写出的字符 对应的 ASCII 值。charchA;intretputchar(ch);2. 标识符2.1 什么是标识符​ 程序中我们自己起的名字统称为标识符2.2 标识符的硬性要求以数字、字母、下划线组成不能以数字开头不能是关键字区分大小写2.3 标识符的软性建议​ 用英文单词见名知意​ 变量名全部小写​ 文件名全部小写单词之间用下划线隔开3. scanf 输入目标接收用户输入数据​ 我们可以借助 getchar() 读取用键入的字符数据。 如果想要读取其他数据怎么办呢C语言提供了 scanf() 函数可以结合 格式符 读取各种类型数据。基础信息作用从标准输入设备键盘上按格式获取数据。语法scanf(格式控制字符串“, …); 需指定头文件#include stdio.h参 1 必须是字符串且必须包含 格式说明符占位符格式符 与 数据类型中使用方式一致。 常用的有 %d、%c、%f、%lf 等。后续参数变参个数直接受 参 1 格式匹配符影响。对应 格式符的 必须是 变量地址变量名可取变量地址代表数据存放位置。示例printf(“请输入一个字符”);// 借助 printf 提示用户输入charch0;// 准备变量存储数据scanf(%c,ch);// 使用变量地址与 格式符对应printf(“请输入三个整数用逗号间隔”);inta,b,c;// 可以不赋初值。scanf(%d,%d,%d,a,b,c);注意事项不要在 scanf 的参 1 中添加类似 printf() 的提示字符串和 \n 换行符。键入数据时数据个数、类型、顺序必须与参 1 中占位符一一对应。键入数据时数据间的分割符必须与 参 1 中 占位符的分割符一致。scanf 的返回值代表格式符成功匹配数据的次数。较少使用VS2019 以后的版本编译时会将 scanf 划为 “不安全函数”爆出C4996 错误推荐你使用 s_scanf() 函数。但学习、练习、测试时直接使用 scanf 很方便可暂时屏蔽该错误。方法 1在项目中设置工程名→右键→属性→C/C→预处理器→预处理器定义→编辑→将 _CRT_SECURE_NO_WARNINGS 加入“预处理定义” 中方法 2在每个.c文件开头第一行添加宏#define _CRT_SECURE_NO_WARNINGS4.原码数的最原始的二进制码12001111000-2310010111-0 1000 00000 0000 0000-1 1000 00011 0000 00011 -10000 0001 1000 0001 1000 0010 -2注意 负数如果在计算机中用原码存会导致两个问题 负数运算结果不正确0的状态还有两种5.反码正数的反码不变 负数的反码符号位不变其他位取反-01111 111100000 0000-11111 111010000 00011 -1 1111 1111 -0如果计算机用反码去存负数运算结果正确但是 0的状态还是有两种6.补码正数的补码不变负数的补码等于反码加1-00000 000000000 0000-11111 11111 0000 00011 -1 0如果计算机用补码去存负数运算结果是正确的0的状态只有一种补码求原码-23原码 10010111反码 11101000补码 11101001反码 10010110补码求原码 符号位不变其他位取反原码 10010111反码求原码 反码加1#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestring.h#includestdlib.hintmain(){//赋值时输入赋的是十进制给的是原码。如果赋值给的是八进制或者十六进制给的是补码//打印时输出十进制打印要的是原码如果是十六进制或八进制打印要的数补码charnum129;//129的原码反码补码 1000 0001//但是num是有符号数最高位为1计算机认为这是一个负数的补码// 补码如何求原码//补码 1000 0001//反码1111 1110//原码 1111 1111printf(num%d\n,num);//-127system(pause);return0;}7.进制的书写和打印数在计算机存的内容没有改变打印时只是输出的形式改变而已#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestring.h#includestdlib.hintmain(){intb056;//printf(a%o\n,b);//%o以八进制数形式输出整数printf(a%X\n,b);//x以十六进制数形式输出整数printf(a%d\n,b);system(pause);return0;}intmain02(){inta123;intb056;intc0xab;printf(a%d\n,a);printf(a%o\n,b);//%o以八进制数形式输出整数printf(a%X\n,c);//x以十六进制数形式输出整数printf(a%#X\n,c);//无符号整数以十六进制形式输出同时添加0X前缀system(pause);return0;}

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…