今天写代码,又遇到了一个bug,开始还以为是我自己哪写错了,没想到竟然在这里出错?







而width和height的类型是float类型,为什么必须用%d打印?接着我查看了一下源码:



如果没理解错的话,CCLOG用的应该是printf打印,那么接下来就很好懂了,我又去做了一个测试:

%d输出float类型

有一些基础必须要知道:

1、float类型是采用IEEE754标准,1位数符,8位阶码(移码表示,要减去127偏置值),23位尾数位(并且隐藏了一位最高位位1,即1.XXX中1被隐藏了)。

2、double类型和float类型相似,只不过是1位数符,11位的阶码,后面52位的尾数位。

3、printf()在输出float类型时候,会自动提升为double类型,并且如果以%d输出的话,只能输出后面的32位。

4、intel的CPU采用的是小端存储,如下图:



真实的值应该是3f-80-00-00(十六进制)

知道了上面这些,输出的错误也就可以理解为什么输出会是0了,%lld输出的是长整型,能够输出64位的数据,所以结果为4607182418800017408,那么这个值代表了什么呢?我们用计算器来转换一下:

很明显,就是把float类型转换成了double类型,高的111111111表示阶码,而用%lld和%d输出都不会进行类型转换为int,所以是直接输出,而%d只能输出低32位,也就是0,而lld能输出64位,所以输出的结果就是4607182418800017408。

%f输出int

知道了这些,用%f输出int其实也就很容易理解了,将int数据的格式按照double类型格式来理解,大部分情况下输出应该都是0,因为比较小的整数按照double类型来理解,阶码都是0-1023,这样看基本就等于1.00000……….003232这样的值,然后%f默认输出小数点后6个0(没记错的话,反正就差不多啦),所以只要你取的值不是特别大,最后输出的永远都是0.000000

[cocos2d-x]用getContentSize()返回的值用CCLOG打印必须用%f的更多相关文章

  1. oracle学习-存储过程返回一个值,和返回一个结果集

    一.返回一个值 --创建存储过程 create or replace procedure sp_hu_test(spcode in varchar2,spname out varchar2)is be ...

  2. 现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值

    问题描述:现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值 思路:参照两个数组归并的过程,每次选取最小的数据进行比较 ...

  3. EasyUI - 一般处理程序 返回 Json值

    使用 一般处理程序(ashx)返回Json值. 原始Json数组的格式: [ { ", "name":"张三", "sex":&q ...

  4. MySqlClient访问tinyint字段返回布尔值

    原文 MySqlClient访问tinyint字段返回布尔值 症状: 使用MySqlClient访问tinyint       unsign 字段返回布尔值 true 和        false,但 ...

  5. Mybatis 3 返回布尔值,需要注意的地方

    在Mybatis中,有时候需要返回布尔值 ,来确定某个记录行是否存在. 例如: <select id="isExistCode" parameterType="st ...

  6. Sql中联合查询中的”子查询返回的值不止一个“的问题

    在子查询中,如果想实现如下的功能: select lib,count(*),select sum(newsNo) from Table1 group by lib from Tabel1 T1,Tab ...

  7. Entity Framework 调用返回标量值的存储过程

    最近项目用到EF,虽然说EF与Linq To SQL有很多地方相似,但是EF(这里指3.5版,4.0版的还没去留意)确实有些地方做得不够方便. 就拿存储过程来说吧,EF里面想调用存储过程不是直接在数据 ...

  8. postman简单教程,如何在请求中引用上次请求返回的值

    做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...

  9. Zend引擎探索 之 PHP中前置递增不返回左值

    首先来讲,一般我们对"左值"的理解就是可以出现在赋值运算符的左侧的标识符,也就是可以被赋值.这样讲也许并不十分确切,在不同的语言中对左值的定义也不尽相同.在这里我们讨论前置递增(和 ...

  10. SQL server 查询出现:---“子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。”SQL查询错误解析---

    最近用select进行数据筛选,碰到下面的这个错误: ---子查询返回的值不止一个.当子查询跟随在 =.!=.<.<=.>.>= 之后,或子查询用作表达式时,这种情况是不允许的 ...

随机推荐

  1. vlunhub靶场之EMPIRE: LUPINONE

    准备: 攻击机:虚拟机kali.本机win10. 靶机:EMPIRE: LUPINONE,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub ...

  2. day50-正则表达式01

    正则表达式01 5.1正则表达式的作用 正则表达式的便利 在一篇文章中,想要提取相应的字符,比如提取文章中的所有英文单词,提取文章中的所有数字等. 传统方法是:使用遍历的方式,对文本中的每一个字符进行 ...

  3. JMETER与BeanShell

    变量 Beanshell应用自定义变量有两种方法: #第一种方法,使用${key}格式,但是需要注意这是用应用的变量是没有定义数据类型的 #log.info(String Key)只能打印字符串,所以 ...

  4. 畅联新设备接入情况:新增威隆NB烟感

    双美接入,应该是电信AEP平台的. ---------------------------------------------------------------------------------- ...

  5. Linux Polkit本地权限提升漏洞(CVE-2021-4034)

    Linux Polkit本地权限提升漏洞(CVE-2021-4034) 免责声明: 漏洞描述 影响范围 漏洞检测 漏洞复现 修复建议 免责声明: 发现这个漏洞被各大预警平台刷屏了,目前主流Linux系 ...

  6. Go语言核心36讲11

    至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器. 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值. 我们今天要讲的字典(map)却不同, ...

  7. 简单的WebAssembly应用搭建

    1      WebAssembly简介 WebAssembly是一种新兴的Web技术,网上的资料并不是很多,简单的可以理解为让C/C++程序运行在浏览器上,官网上用四个词来描述该技术:高效.安全.开 ...

  8. 6、将两个字符串连接起来,不使用strcat函数

    /* 将两个字符串连接起来,不使用strcat函数 */ #include <stdio.h> #include <stdlib.h> void strCat(char *pS ...

  9. gRPC(Java) keepAlive机制研究

    基于java gRPC 1.24.2 分析 结论 gRPC keepAlive是grpc框架在应用层面连接保活的一种措施.即当grpc连接上没有业务数据时,是否发送pingpong,以保持连接活跃性, ...

  10. python(牛客)试题解析1 - 简单

    导航: 一.NC103 反转字符串 二.NC141 判断是否为回文字符串 三.NC151 最大公约数 四.NC65 斐波那契数列 五.字符按排序后查看第k个最小的字母 六.数组内取出下标相同的元素求和 ...