首页 / 帖子
ox01是什么意思?

在profile/profile.install line 128

      'status' => array(
        'type' => 'int',
        'not null' => TRUE,
        // Set the default to ENTITY_CUSTOM without using the constant as it is
        // not safe to use it at this point.
        'default' => 0x01,
        'size' => 'tiny',
        'description' => 'The exportable status of the entity.',
      ),

请问ox01是怎么来的呢?
好像好几个地方都可以看到哦,有什么特别的地方吗?是如何表达的呢,难道ox01是表示一个数字?

1个答案
AnnyO
发布于:2015-10-21 17:47

0x是16进制,为了计算机方便处理2进制。主要目的是为了方便以后判断,或者容纳多个值。(方便与或运算)

举个例子:
0x01 表示喜欢黄色
0x02 表示喜欢绿色
0x04 表示喜欢红色
所以,可以这样:
喜欢黄色又喜欢绿色:0x01|0x02 = 0x03
喜欢黄色又喜欢绿色又喜欢红色:0x01||0x2|0x04 = 0x07

那么,问题来了,如何判断一个人喜欢黄色,如果通常情况下,你要写三个判断(颜色更多,要写更多判断)比如:

if ($like == 0x01 || $like == 0x03 || &like == 0x07) {
}

因为用了二进制位表示发,所以写法可以简单一点:

if ($like & $0x1) { 
  /*****重要的一句话出现了,做好心理准备啊****/
  // 0x01表示黄色,只要跟黄色做与运算,它那一位是空的,就表示不符合
  /*****重要的一句话结束了,放松一下吧****/
}


所以二进制就是表示某一个位是0还是1,1表示占有,0表示没有。

参考下面:

0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
10 = 1010
11 = 1011
12 = 1100
13 = 1101
14 = 1110
15 = 1111


所以,这种定义的时候一般是跳着定义的,比如0x1 0x2 0x04 0x8,中间的不定义,只定义有一个1的情况,比如第一位是1,第二位是1(2),第三位是1(4),第四位是1(8)等等,因为中间的情况能运算到,0x1|0x2=0x3,0x1|0x2|0x4=0x7,以此类推。


这种最好不要用常规的加减理解,就用二进制占位符的形式理解就可以了。