printf标识总结(转)

2023-11-13

printf标识总结(转)

Dev-C++下基本数据类型学习小结

环境:Dev-C++ 4.9.6.0 (gcc/mingw32), 使用-Wall编译选项

 

基本类型包括字节型(char)、整型(int)和浮点型(float/double)。

定义基本类型变量时,可以使用符号属性signed、unsigned(对于char、int),和长度属性short、long(对

于int、double)对变量的取值区间和精度进行说明。

下面列举了Dev-C++下基本类型所占位数和取值范围:

符号属性     长度属性     基本型     所占位数     取值范围       输入符举例      输出符举例

--            --          char         8         -2^7 ~ 2^7-1        %c          %c%d%u

signed        --          char         8         -2^7 ~ 2^7-1        %c          %c%d%u

unsigned      --          char         8         0 ~ 2^8-1           %c          %c%d%u

[signed]      short       [int]       16        -2^15 ~ 2^15-1              %hd

unsigned      short       [int]       16        0 ~ 2^16-1             %hu%ho%hx

[signed]      --           int         32        -2^31 ~ 2^31-1              %d

unsigned      --          [int]        32        0 ~ 2^32-1              %u%o%x

[signed]      long       [int]        32        -2^31 ~ 2^31-1              %ld

unsigned      long       [int]        32        0 ~ 2^32-1             %lu%lo%lx

[signed]      longlong   [int]       64        -2^63 ~ 2^63-1             %I64d

unsigned      longlong   [int]       64        0 ~ 2^64-1          %I64u%I64o%I64x

--            --          float        32       +/- 3.40282e+038         %f%e%g

--            --          double       64       +/- 1.79769e+308  %lf%le%lg   %f%e%g

--            long        double       96       +/- 1.79769e+308        %Lf%Le%Lg

几点说明:

1. 注意!表中的每一行,代表一种基本类型。“[]”代表可省略。

  例如:char、signed char、unsigned char是三种互不相同的类型;

  int、short、long也是三种互不相同的类型。

  可以使用C++的函数重载特性进行验证,如:

  void Func(char ch) {}

  void Func(signed char ch) {}

  void Func(unsigned char ch) {}

  是三个不同的函数。

2.char/signed char/unsigned char型数据长度为1字节;

  char为有符号型,但与signed char是不同的类型。

  注意! 并不是所有编译器都这样处理,char型数据长度不一定为1字节,char也不一定为有符号型。

3.将char/signed char转换为int时,会对最高符号位1进行扩展,从而造成运算问题。

  所以,如果要处理的数据中存在字节值大于127的情况,使用unsigned char较为妥当。

  程序中若涉及位运算,也应该使用unsigned型变量。

4.char/signed char/unsigned char输出时,使用格式符%c(按字符方式);

  或使用%d、%u、%x/%X、%o,按整数方式输出;

  输入时,应使用%c,若使用整数方式,Dev-C++会给出警告,不建议这样使用。

5.int的长度,是16位还是32位,与编译器字长有关。

  16位编译器(如TC使用的编译器)下,int为16位;32位编译器(如VC使用的编译器cl.exe)下,int为32

位。

6.整型数据可以使用%d(有符号10进制)、%o(无符号8进制)或%x/%X(无符号16进制)方式输入输出。

  而格式符%u,表示unsigned,即无符号10进制方式。

7.整型前缀h表示short,l表示long。

  输入输出short/unsigned short时,不建议直接使用int的格式符%d/%u等,要加前缀h。

  这个习惯性错误,来源于TC。TC下,int的长度和默认符号属性,都与short一致,

  于是就把这两种类型当成是相同的,都用int方式进行输入输出。

8.关于long long类型的输入输出:

  "%lld"和"%llu"是linux下gcc/g++用于long long int类型(64bits)输入输出的格式符。

  而"%I64d"和"%I64u"则是Microsoft VC++库里用于输入输出__int64类型的格式说明。

  Dev-C++使用的编译器是Mingw32,Mingw32是x86-win32 gcc子项目之一,编译器核心还是linux下的gcc。

  进行函数参数类型检查的是在编译阶段,gcc编译器对格式字符串进行检查,显然它不认得"%I64d",

  所以将给出警告“unknown conversion type character `I' informat”。对于"%lld"和"%llu",gcc理

所当然地接受了。

  Mingw32在编译期间使用gcc的规则检查语法,在连接和运行时使用的却是Microsoft库。

  这个库里的printf和scanf函数当然不认识linuxgcc下"%lld"和"%llu",但对"%I64d"和"%I64u",它则是

乐意接受,并能正常工作的。

9.浮点型数据输入时可使用%f、%e/%E或%g/%G,scanf会根据输入数据形式,自动处理。

  输出时可使用%f(普通方式)、%e/%E(指数方式)或%g/%G(自动选择)。

10.浮点参数压栈的规则:float(4 字节)类型扩展成double(8 字节)入栈。

   所以在输入时,需要区分float(%f)与double(%lf),而在输出时,用%f即可。

   printf函数将按照double型的规则对压入堆栈的float(已扩展成double)和double型数据进行输出。

   如果在输出时指定%lf格式符,gcc/mingw32编译器将给出一个警告。

11.Dev-C++(gcc/mingw32)可以选择float的长度,是否与double一致。

12.前缀L表示long(double)。

   虽然long double比double长4个字节,但是表示的数值范围却是一样的。

   long double类型的长度、精度及表示范围与所使用的编译器、操作系统等有关。

 

Pastedfrom <http://www.blogjava.net/alwayscy/archive/2007/01/23/95536.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

printf标识总结(转) 的相关文章

  • 如何让 gcc/clang 警告 switch 语句中缺少中断

    有什么办法可以使gcc or clang警告 switch 语句中缺少中断 具体来说 我几乎总是希望 case 语句以中断结束 如果我不这样做的话 如果我能让编译器抱怨 那就太好了 如果它会寻找一个break语句或一个 fall throu
  • 减少内存分配GCC命令

    今天 在我的计算机科学课上 我被告知我可以调整程序在编译期间可以分配的内存量 使用 GCC Linux 该数量默认设置为最佳模式 这意味着尽可能多 在调试应用程序期间 我可以从这个编译器功能中受益匪浅 因为我需要正确处理分配错误 这在我的
  • gamma(double x) 的定义是什么以及为什么它在两个 gcc 版本上不同?

    通过不幸的情况 我发现我的标准库实现
  • 如何在 g++ 中使用不同的 STL

    我想对 g 使用不同的 STL 而不是其默认的 libstdc 做到这一点最简单的方法是什么 我发现 nostdinc 标志禁止 g 查找其 STL 标头 但这只是编译时的事情 它仍然会使 g 链接到它自己的 STL 所以我需要找到一种方法
  • 我可以让 C++ 编译器在编译时实例化对象吗?

    我正在编写一些代码 其中包含大量相当简单的对象 我希望它们在编译时创建 我认为编译器能够做到这一点 但我无法弄清楚如何做到 In C我可以执行以下操作 include
  • 类和结构在填充和继承方面的区别

    以下所有操作都将在 GCC 9 1 上使用编译器资源管理器 https github com mattgodbolt compiler explorer 在 x86 64 中 使用 O3 我有这个代码 struct Base Base do
  • 为什么GCC不报告未初始化的变量?

    include
  • 使用基类指针创建对象时缺少派生类析构函数

    在下面的代码示例中 未调用派生类析构函数 知道为什么吗 我有一个具有虚函数的基类 现在我使用基类指针来创建派生类的新对象 我的理解是 当派生类对象被销毁时 首先调用派生类的析构函数 然后调用基类 但是我只看到基类的析构函数被调用 有谁知道我
  • richTextBox 字符数限制?

    我在丰富的文本框中存储大量文本时遇到问题 我正在尝试读取一个相当大的文本文件 从 90mb 到 450mb 的任意位置 并将我读到的内容放入富文本框中 它可以在一个简单的程序中运行 但是当我在一个复杂的程序中运行时 我会得到一个 OutOf
  • C 程序的“编译器正确”命令

    这是关于中提到的编译步骤Linux 期刊文章 https www linuxjournal com article 6463 C 程序是使用编译的cpp cc1 as and ld该文章中的命令 我能够执行这些步骤cpp as and ld
  • 为什么要在项目中使用#include_next?

    引用iOS有关包装器标头的文档 http developer apple com library ios documentation DeveloperTools gcc 4 0 1 cpp Wrapper Headers html inc
  • GCC 4.7 字符串文字的源字符编码和执行字符编码?

    Linux x86 64 上的 GCC 4 7 是否具有默认字符编码 用于验证和解码 C 源文件中字符串文字的内容 这是可配置的吗 此外 当将字符串数据从字符串文字链接到输出的数据部分时 它是否具有默认的执行字符编码 这是可配置的吗 在任何
  • 如何更改 Xcode 中的编译器

    我正在 Xcode 4 6 3 中编译 C 代码 但我不知道我正在使用哪个编译器 我需要使用 gcc 4 2 提前致谢 If you really需要更改为 gcc 您可以在构建设置中执行此操作
  • Linux 的 gcc __attribute__((selectany)) 替代方案?

    我想知道是否有替代方案 attribute selectany 在Linux中 我想定义这样的东西 char a qwe zxc 并将其包含在许多链接在一起的 c 文件中 因此链接器将看到 a 的多个定义 因此不会链接 我读过这个属性 se
  • 如何在 Fortran 90 中迭代包含数字、单词和空格的字符串?

    文件说明 STL文件由以下部分组成 solid
  • 在 Ubuntu 上用 C 项目编译和链接 GTK 3

    我相信这不是重复的问题 在发布此问题之前我已经看过所有问题 答案 我想我这里的情况有所不同 我使用Ubuntu 12 04并下载GTK 2 和 3 我从 GNOME 网站复制了一个简单的 GTK 源代码 但是当我在终端中使用这个命令时 gc
  • C++ while 循环优化无法正常工作

    我有这个代码段 include
  • 如何删除Excel 2010单元格中的某些字符

    在 A 列中 我有很多类似这样的名称 约翰 史密斯 我仍然希望它们在 A 中 但 被删除了 If John Smith 位于单元格 A1 中 然后使用以下公式执行您想要的操作 SUBSTITUTE SUBSTITUTE A1 内部 SUBS
  • 分析 ELF 部分和符号大小的工具

    我需要一种方法来分析 ARM 的 GCC 编译器的输出文件 我正在为裸机进行编译 并且我非常关心大小 我可以用arm none eabi objdump由交叉编译器提供 但如果存在用于此任务的工具 则解析输出并不是我渴望做的事情 您知道存在
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm

随机推荐

  • vue3快速入门-Teleport传送(瞬移组件)

    Vue 的组件架构使我们能够将用户界面构建为能够精美地组织业务逻辑和表示层的组件 Teleporting是Vue 3发布带来的一项新功能 它的灵感来自React Portals 相同的门户是 React 中的一个常见功能 在 Vue2 的
  • 2023最新100道渗透测试面试题(附答案)

    眨眼间2023年快过去一半了 不知道大家有没有找到心仪的工作呀 今天我给大家整理了100道渗透测试面试题给大家 需要答案的话可以在评论区给我留言哦 第一套渗透面试题 什么是渗透测试 它的目的是什么 渗透测试的五个阶段是什么 您如何选择正确的
  • SimPy

    目录 简介 安装命令 Environment Events Sleep until woken up Waiting for another process to terminate Interrupting another process
  • 【“码”力全开,“章”显实力】2022年第1季Task挑战赛贡献者榜单

    通过区块链技术及智能合约实现石头剪刀布的游戏玩法 解决双方遇到分歧的场景 让一方说服另一方 从0开始构建WeCross Go SDK 以方便社区开发者通过Go SDK实现UBI接口的快速调用 一系列FISCO BCOS WeBASE的实操教
  • H5之webcoekt播放JPEG图片流

    一 简介 既然webcoekt是基于tcp连接的 理论上讲所有的浏览器是可以私有协议处理二进制的 如果我们需要播放视频 我们可以将视频数据在后端解码后直接将图片推送到webcoekt前端 然后前端通过websocket接收图片然后将图片显示
  • 如何修改jar文件的内容

    在做 或修改别人的 项目的时候 可能遇到要修改调用的的jar包内的类属性或方法的问题 在eclipse或是其他的IDE中是无法直接修改的 所以需要一个解压jar gt 修改文件 gt 编译 gt 打包成jar文件的过程 下面简要的记录下我是
  • KL散度

    KL散度 Kullback Leibler divergence 也称为相对熵 relative entropy 是用来衡量两个概率分布之间差异的一种指标 在机器学习中 KL散度常常用于度量两个概率分布之间的相似度或差异性 具体来说 假设我
  • Volatile关键字

    目录 1 volatile是什么 2 volatile具有什么样的特性呢 3 volatile的内存语义 JMM 在java中如何保证可见性呢 总线嗅探机制 如何保证原子性 volatile关键字可以保证指令重排序 JMM 就将内存屏障插
  • cocos2d-x位图字体生成工具Bitmap Font Generator的使用(内含命令行)

    欢迎转载 本帖地址 http blog csdn net jinjian2009 article details 9371691 刚才发完贴发现 图全没了 原来自己直接贴的 没有上传 现在补全了 说下本文 重点就是命令行 如果用过这个工具的
  • adb server version (31) doesn't match this client

    报错信息如下 C Users linux gt adb shell adb server version 31 doesn t match this client 36 killing daemon started successfully
  • 超详细的Elasticsearch教程

    一 Elasticsearch介绍和安装 用户访问我们的首页 一般都会直接搜索来寻找自己想要购买的商品 而商品的数量非常多 而且分类繁杂 如何能正确的显示出用户想要的商品 并进行合理的过滤 尽快促成交易 是搜索系统要研究的核心 面对这样复杂
  • Expected object of backend CPU but got backend CUDA for argument #2 'weight' 报错的问题和解决办法

    很实用的工具 https blog csdn net zz2230633069 article details 93266950
  • GIT的使用

    GIT 的常规操作 常规操作也是我自己平时常用的几个命令 学自于 pro git 这本书中 git 配置文件 git的配置文件位置 针对所有用户 etc gitconfig 针对当前用户 gitconfig 查看配置的方法 git conf
  • 图像匹配算法

    图像匹配算法分为3类 基于灰度的匹配算法 基于特征的匹配算法 基于关系的匹配算法 1 基于灰度的模板匹配算法 模板匹配 Blocking Matching 是根据已知模板图像到另一幅图像中寻找与模板图像相似的子图像 基于灰度的匹配算法也称作
  • PowerShell 语法

    PowerShell是微软公司开发的一种任务自动化和配置管理框架 基于 NET框架 以下是PowerShell的一些常用语法 命令语法 标准命令语法 如 Get ChildItem 活动目录命令语法 如 Get ADUser 参数 格式为
  • 人生苦短,我用python

    如果你看到一个人穿着一个短袖 短袖上面印着 人生苦短 我用python 不用怀疑 他一定是一个python程序员 作为编程热门语言排行榜首的python 有着强大的粉丝社区 因为它的简洁 越来越多的人喜欢上了它 而这个语言 就是由吉多 范罗
  • Springboot内置Tomcat线程数测试

    SpringBoot 2 7 3 本文主要介绍SpringBoot内置Tomcat的主要参数 解析最大线程数和最大连接数的作用方式 SpringBoot各版本的参数配置可能不完全一样 本文以2 7 3版本为例进行试验 一 默认配置 Spri
  • python实验一

    1 输入带有py的字符串 替换其中出现的字符串py为python输出替换后的字符串 s input 输入带有py的字符串 print s replace py python 运行结果 2 获得用户输入的一个字符串 请输出其全小写形式 s i
  • python学习(1)图像处理指令解析

    1 img i j c i表示图片的行数 j表示图片的列数 c表示图片的通道数 RGB三通道分别对应0 1 2 坐标是从左上角开始 灰度图片访问方式为 gray i j 2 生成椒盐噪声 from skimage import io dat
  • printf标识总结(转)

    printf标识总结 转 Dev C 下基本数据类型学习小结 环境 Dev C 4 9 6 0 gcc mingw32 使用 Wall编译选项 基本类型包括字节型 char 整型 int 和浮点型 float double 定义基本类型变量