php基础——基本数据类型

Integer 整型

整型值可以用十、八、十六进制表示前面可以加上可选的符号(- 或者 +)

$num1 = 111;
$num2 = 0111;    // 1 + 1*8 + 1*8*8= 73
$num3 = 0x111;   // 1 + 1*16 + 1*16*16 = 273
$num4 = 0xCBA;   // 10 + 11*16 + 12*16*16 = 3258
var_dump($num1,$num2,$num3,$num4);

整数溢出

    如果给定的一个数超出了integer的范围,将会被转换为float 同样如果执行的运算结果超出了integer范围,也会返回float Integer值的字长可以用常量 PHP_INT_SIZE 来表示 最大值可以用常量 PHP_INT_MAX 来表示
// 64 位系统下的整数溢出
var_dump(PHP_INT_MAX);	// int 9223372036854775807
var_dump(PHP_INT_MIN);
// 字长和平台有关
var_dump(PHP_INT_SIZE);	// int 8

$num = 9223372036854775808;
var_dump($num); 		// float 9.2233720368548E+18

原因:
一个字节8位,8个字节,有 8*8 = 64,有一位是符号
2的63次方-1,就是正数的最大值
2的63次方,就是负数的最大值

Float 浮点型

计算机运算时会将十进制转化为二进制进行运算,整数转化为二进制都是精确的,小数转化为二进制可能会出现不精确问题,所有编程语言都存在这个问题

PHP浮点数具有14位十进制数字的精度(JS有17位)

    14位精度值,是从左边第一个非0数字计算 如果不到14位,则会精确显示,超过会进行四舍五入
$num = 0.111000333555666;
var_dump($num); // float 0.11100033355567
$num = 0.0111000333555666;
var_dump($num); // float 0.011100033355567
$num = 0.0111000333;
var_dump($num); // float 0.0111000333

浮点数的比较

    不含运算的浮点数比较,可以精确比较 含有运算的浮点数比较,可能出现精度丢失
var_dump(0.3 - 0.1);    // float 0.2   不知道为何这里是精确的0.2,四舍五入了?

if ( (0.3-0.2) == 0.1 ){
          
   
    echo "相等";
}else{
          
   
    echo "不相等";     // 打印结果  不相等
}


if ( (0.8-0.3) == 0.5 ){
          
   
    echo "相等";       // 打印结果  相等
}else{
          
   
    echo "不相等";
}
/*
10进制    ------- 2进制
0.5 -------------  0.1
0.8  ------------- 0.1100...

出现以上两种不同结果的原因是,浮点数不精确,某些小数在10进制下,是有限的,转成2进制是无限循环
因此损失一些精度,导致浮点数计算和数学上结果不一致
银行一般存整数,精确到分,来解决此问题
*/

浮点数的范围

    浮点数的字长和平台相关,常最大值是1.8e308,具有14位十进制数字的精度 整型超过最大之后会自动转换位浮点型,且这个浮点型不精确,只是大概的值
$num = 9223372036854775807;
var_dump($num); // int 9223372036854775807     精确

$num = 922337203685477580.7;
var_dump($num); // float 9.2233720368548E+17   不精确

$num = 9223372036854775808;
var_dump($num); // float 9.2233720368548E+18   不精确

Boolean 布尔类型

要指定一个布尔型,使用关键字true或false,不区分大小写

转换为布尔值

    要明确地将一个值转换成 boolean ,用 (bool) 或者 (boolean) 来强制转换,但是很多情况下不需要用强制转换 因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换

当转换为 boolean 时,以下值都被当做 false

    布尔值 FALSE 整型值 0 浮点型值 0.0 空字符串"" 字符串 "0" 不包括任何元素的数组 array() 特殊类型 NULL 从空标记生成的 SimpleXML 对象

所有其它值都被认为是 TRUE (包括任何资源)。

String 字符串

字符串单开一个页面 😃

经验分享 程序员 微信小程序 职场和发展