开发者学堂课程【PHP 基础入门课程(上) :整型】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/709/detail/12590
整型
内容介绍
一、概念
二、示例
三、小结
一、概念
整型:简单一点讲数据是整数,但是根据进制方式不同,有不同的数据格式。
·十进制(最常见):
默认,逢十进一,有0-9共十个符号,在这里会发现右边的数据在变,当右边的数据变到已经支撑不下的时候,就会往左边挤,1、2、3、4、5、6、7、8、9、10、当到10的时候,需要把1往左边挤,然后右边又从0~9开始,所有的进制都是一样的,阿拉伯数字即可,如123。
·八进制:逢八进一,有0-7共八个符号,7之后就是1和0,但是它不叫十,叫做一零,起始使用0标志,如0123。
·十六进制:逢十六进一,有0-9、a-f 共16个符号,a 代表的是十,f 代表的是十五,所以它是0~15,一共16个符号,起始使用0x标志,如0x123。
·二进制(计算机使用最多,但是人使用很少):逢二进一,有0-1共两个符号,起始使用0b标志,如0b101。
二、示例
#整型
$int1 = 123;
#默认十进制
$int2 = 0123;
#八进制表示
$int3 = 0x123;
#十六进制表示
$int4= 0b101;
#二进制表示
虽然定义数据的时候可以使用多种进制表示,但是显示数据的时候,默认 PHP 都会转换成10进制输出#接上述代码,那为什么这么做?原因其实很简单,电脑输出给谁看?人看的懂得就是十进制,所以它都会转成十进制来做。
所以它都会转成十进制来做,那比如说来举个例子,08 integer 这是整型,接下来首先来定义组数据,定义整形数据怎么定义呢?其实很简单,就是给变量名就可以了,比如说 $int1 = 123,那么这就是一个典型的十进制的一个整形,那 八进制 $int2 =0123、十六进制 $int3= 0x123、$int4 =0b101,这个时候你就不要123了,因为123已经超出范围了,所以是101,那么也不知道它到底对不对?
单纯看这些看不出对错,那么怎么办呢?浏览器访问一下,你会发现没有语法错误,所以说明系统识别了,那系统识别了,那这些结果到底是多少呢?
输出 echo $int1, ‘ <br/>’ ,$int2, ‘ <br/>’ ,$int3, ‘ <br/>’ ,$int4,
输出完了之后来看一下,浏览器看看会给解释成什么样子,对比一下你会发现第一个123还是123,但是第二个把0123的转换成了什么?
很明显不是0123变成了83,而同样的0x的16进制的123,它变成了291,而二进制101转换成了5,说明它都转换成一个能识别的十进制了,这就是整形的一个特点,以及 php 对于整形输出的特点。
1 <?php
2
3 #整型
4
5 #定义整型数据
6 $int1 = 123;
7 $int2 =0123;
8 $int3= 0x123;
9 $int4 =0b101;
10
11 #输出
12 // echo $int1, ‘ <br/>’ ,$int2, ‘ <br/>’ ,$int3, ‘ <br/>’ ,$int4;
13
#接上述代码
echo $int1,$int2,$int3,$int4; #123,83,291,5
如果想要保持原来的进制输出,就需要使用 printf (格式,数据1,数据2...)来实现
#接上述代码
printf('%d',$int1);
#十进制输出 Sint1 (d代表的是十进制)
printf('%o',$int2);
#八进制输出 $int2 (o代表的是八进制)
printf('十六进制是%x,二进制是%b',$int3,$int4);
系统只会去识别里面的百分号的内容,然后与后面的这个内容顺序的去替换,按顺序依次进行类推。
比如输出这样的一个值,保留原来格式输出,数值格式输出怎么办呢?
printf(‘123的十进制是%d;83的八进制是%o;291的十六进制是%x;5的二进制是%b',Sint1,$int2,Sint3,Sint4);然后后面一定要跟对应的那个数值啊,而且你要保证这个顺序能对应上,要不然它的解析肯定会有问题的,会出现意想不到的一个结果,可以去试试看,那么回到浏览器来看一下,123的实际上就是123,83对应的是十进制,83的八进制就是123, 291的十六进制对应16进制计算方法也是123,但是发现虽然说用到的是一个保留进制的输出,但是它不会在前面加什么零x,这个地方加个零b,是不是就不会加了,这是它的一个方式,它只会输出它对应的数值格式,而不会带这些所谓的一个禁止标志。
14 #保留数值格式输出
15 // printf(‘123的十进制是:%d;83的八进制是:%o;291的十六进制是:%x;5的二进制是:%b',Sint1,$int2,Sint3,Sint4);
16
17
注意:
整数最大保存空间为 PHP_INT_SIZE 的值,即8个字节(PHP7 以前是4个字节),能表示的最大值是 PHP_INT_MAX 的值,最小值是 PHP_INT_MAX+1 的负数( PHP支持正负数)
echo PHP_INT_SIZE; #4
echo PHP_INT_MAX;
#9223372 36854775807,最小值是-9223372036854775808,负数的绝对值比正数的绝对值大一。
首先来查看整型大小, 输入 echo PHP_INT_SIZE,回到浏览器对应的看一看,这个最大是多少呢?
八说明有八个字节,那八个字节能表示的位数一共有多大呢? echo= PHP_INT_MAX ,此时换一种方式,它叫做什么呢?
$var = PHP_INT_MAX,然后我给大家看一下这个类型,前面讲过 $var 可以查看,浏览器刷新, int 说明它是一个整型,那整型在 php 中这个数值是有符号的,有符号是什么意思呢?就是有正负,那负值我怎么拿到呢?理论上讲其实正负是各占一半,那意味着负数是不是取个反就可以了呢?同样的电量重新赋值,把它等于加上一个一,应该说取反,确切的讲给它一个符号看行不行?
你发现负的是不是也可以?而且它同时告诉,它依然是整型,那我怎么能够让它变成不是整型呢?
再给它减去一个一,你如果要用这种方式的话,我们就给它怎么样?给它用括号包起来,说明这是一个整体,最大值还加一了,刷新变成不再是整型,变成了一个浮点型,这是后面要学的,所以说明这个已经不是它的一个最大值了,从负数的角度来说是最小值,从那个绝对值得来角度来讲,它是一个最大值。
那么此时它已经变成了一个什么?它变成了一个对应的一个负数,那是因为什么呢?
是因为这个东西加一的时候,它已经变成了浮点数了。那如果说换一种方式,把它变成减的话,这个结果是什么呢?
是不是变回整型了。所以这个地方说明一个问题,这个内容已经是最大的正数了,你要是再加一它就变成了负数,变成了浮点数,不再是整型,那么即便你再取一个反好像大小一样,但是系统已经不够支撑了,所以这样的话能够得到负数的一个最大值,而且只能用减不能先加取负,因为先加的这个过程就已经把它变成了非整型,超出整形现在也就知道了,它会被浮点型接受。
特别要注意点,-9223372036854775808相当大,这个都得有八位,再来一个八位,18位的整型得多少?
18 #查看整型大小
19 // echo PHP_INT_SIZE;
20
21 $var = PHP_INT_MAX;
22
23 #PHP 中,数值是有符导(有正负)
24 $var = -PHP_INT_MAX- 1; #负数最大值(只能用减,不能先加取负:先加的时候已经超出整型)
25 var_dump(Svar);
三、小结
1、整型就是保存的是整数
2、整数的形式有多种,有不同的定义方式(根据进制有关):
·十进制:直接0-9定义,但是最前面不要去使用0,如果使用0系统就会认为这是八进制。
·八进制:前面使用0,后跟0-7。
·十六进制:前面使用0x,后跟0-9+a-f。
·二进制:前面使用0b,后跟0-1,这两个数就会进行不同的组合。
3、 PHP 不管定义时采用的是什么整型,输出都默认转换成十进制。原因就是方便文化程度不高的人去看,对应特殊复杂的进制符号看不懂,使用最多且容易看的就是十进制,所以说它是会转换成十进制,方便用户查看。
4、想要保留原来格式,或者指定格式输出整数,使用 printf()
·十进制:%d
·八进制:%0
•十六进制:%x
•二进制:%b
5 PHP 中整型是有符号类型(有正负)
•最大值: PHP_INT_MAX
.最小值: -PHP_INT_MAX-1