今天写代码,又遇到了一个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. 【算法】浅学 LCA

    参考资料 浅析最近公共祖先(LCA) 最近公共祖先 - OI Wiki [白话系列]倍增算法 一.概念 最近公共祖先称为 LCA (Lowest Common Ancestor) 它指的是在一颗树中, ...

  2. 小米MIUI禁止系统更新

    删除downloaded_rom的文件夹,随便找一个文件(文件,不是文件夹),重名为downloaded_rom(是把一个文件重命名),这样系统后台偷偷下载时,就不知道该存放更新包的文件,就无法偷偷更 ...

  3. C++ set集合容器用法解析

    1.简介 set是C++STL库中的一个容器,他十分的便利,所有的元素插入时都会被自动排序,并且容器内保证元素不重复,就想高一数学中讲的集合具有互异性一样,(好像set本来就叫集合容器 bushi)2 ...

  4. 13.内建函数eval()

      eval函数 eval()函数十分强大 -- 将字符串当成有效的表达式来求值并返回计算结果 例如下图,eval会将字符串的引号去掉并且计算返回结果  

  5. vulnhub靶场之THALES: 1

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

  6. Python基础部分:4、 python语法之注释

    目录 一.python语法之注释 1.什么是注释 2.如何编写注释 二.PEP8规范 一.python语法之注释 1.什么是注释 注释用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何 ...

  7. Android 跨进程渲染

    本项目用于验证 Android 是否能够跨进程渲染 View,最终实现了在子进程创建WebView,主进程显示的功能. 一.跨进程渲染的意义 有一些组件比如 WebView 如果在主进程初始化,会大大 ...

  8. el-scrollbar 监测滚动条

    export function processScroll (_this) {   let _self = _this   let scrollbarEl = _this.$parent.wrap   ...

  9. KeeWiDB的高性能修炼之路:架构篇

    数据也有冷热之分,你知道吗? 根据访问的频率的高低可将数据分为热数据和冷数据,访问频率高的则为热数据,低为冷数据.如果热.冷数据不区分,一并存储,显然不科学.将冷数据也存储在昂贵的内存中,那么你想,成 ...

  10. Rust Aya 编写 eBPF 程序

    本文地址:https://www.ebpf.top/post/ebpf_rust_aya 1. 前言 Linux 内核 6.1 版本中有一个非常引人注意的变化:引入了对 Rust 编程语言的支持.Ru ...