为什么两个连续铸造会改变一个整数?

时间:2015-04-24 11:12:38

标签: c++

我写了以下程序:

class basic {

var $CONNECTION;

function __construct($dbh) {
    $this->CONNECTION = $dbh;
  }

function simple($id) {
$conn = $this->CONNECTION;
$query = $conn->prepare("SELECT * FROM table WHERE id = $id");
$query->execute();
$row = $query->fetch(PDO::FETCH_OBJ);
$thing = $row->partoftable;
echo $thing;
 }
}

//class ends you can use thae class like this

$hostname = 'hostname';
$username = 'db';
$password = 'password';

try {
$dbh = new PDO("mysql:host=$hostname;dbname=db", $username, $password);
}
 catch(PDOException $e)
    {
    echo $e->getMessage();
 }

$first = new basic($dbh);
$first->simple(12);

据我们所知,浮点数在内存中的长度至少为4个字节。十进制中的#include <iostream> int main() { int i =123456789; float f=i; int j=f; std::cout<<"j-i ="<<j-i; } 与十六进制中的123456789相等,且小于4个字节。所以我为什么在运行上面的程序时,输出不是0x75BCD15

0

1 个答案:

答案 0 :(得分:12)

因为float只有23位精度(*)。符号和指数需要其他9位。这意味着在16,777,216之后,你会在“整数”浮动范围内获得漏洞。

(*)实际上是24位,但只需要存储23位;第一位是指数隐含的。