当前位置: 首页 > 面试题库 >

使用单个管道“ |”会做什么 在函数论证中吗?

章盛
2023-03-14
问题内容

以下面的代码为例:

phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);

使用了单个参数,但我提供了由单个管道符号分隔的选项列表。

  • 函数中的参数值究竟发生了什么?
  • 我可以在自己的函数中使用相同的东西吗?
  • 是这样吗,而不是说通过传递数组有什么好处?

问题答案:

按位运算符

按位运算符修改所涉及值的位。OR基本上,按位进行“ 或”运算左右参数的每一位。例如:

5 | 2

将转换为位/二进制为:

101 | 10

这将导致:

111

因为:

1 || 0 = 1
0 || 1 = 1
1 || 0 = 1

作为7的整数,如果您执行以下操作,则得到的正是:

echo 5 | 2;

用埃迪·伊扎德(Eddie Izzard)的话说吧!

正如Ignacio所说,这在PHP(和其他语言)中最常被用作组合多个标志的方式。通常将每个标志定义为一个常量,其值通常设置为一个整数,该整数仅表示一个位于不同偏移量的位:

define('FLAG_A', 1); /// 0001
define('FLAG_B', 2); /// 0010
define('FLAG_C', 4); /// 0100
define('FLAG_D', 8); /// 1000

然后,当您将OR它们一起使用时,它们将以各自的位偏移量进行操作,并且永远不会发生冲突:

FLAG_A | FLAG_C

转换为:

1 | 100

因此,您最终打开了:

101

代表整数5。

然后,所有代码要做的(将对设置的不同标志起反应的代码AND)如下(使用按位):

$combined_flags = FLAG_A | FLAG_C;

if ( $combined_flags & FLAG_A ) {
  /// do something when FLAG_A is set
}

if ( $combined_flags & FLAG_B ) {
  /// this wont be reached with the current value of $combined_flags
}

if ( $combined_flags & FLAG_C ) {
  /// do something when FLAG_C is set
}

归根结底,通过使用命名常量,它使事情变得更容易阅读,而通常依靠整数值而不是字符串或数组来使其更优化。使用常量的另一个好处是,如果在使用常量时键入错误,则编译器处于更好的情况下可以发出警告并发出警告…如果使用字符串值,则它无法知道任何错误。

define('MY_FLAG_WITH_EASY_TYPO', 1);

my_function_that_expects_a_flag( MY_FLAG_WITH_EASY_TPYO );

/// if you have strict errors on the above will trigger an error

my_function_that_expects_a_flag( 'my_string_with_easy_tpyo' );

/// the above is just a string, the compiler knows nowt with 
/// regard to it's correctness, so instead you'd have to
/// code your own checks.


 类似资料:
  • 问题内容: 首先,我想澄清一个问题:它是关于函数的, 而不是 列表的片段或类似的字符串。 文档提到该函数在NumPy中使用,并且没有给出用法示例(说了 如何使用它, 但没有说 何时使用它 )。而且,我 从未 见过在任何Python程序中使用过此函数。 在以纯Python(无NumPy或SciPy)编程时,何时应使用该函数?任何示例将不胜感激。 问题答案: 给出与相同的结果。一个的优点对象是,它可以

  • 问题内容: 我知道构造函数会创建一个新列表,但是它的特征到底是什么? 打电话时会怎样? 打电话时会怎样? 打电话时会怎样? 据我所知,调用构造函数会删除最外面的花括号(元组或列表),并将其替换为。这是真的?还有什么其他细微差别? 问题答案: 将传递给它的iterable转换为列表。如果itertable已经是一个列表,则返回 浅表副本 ,即仅最外层的容器是新的,其余对象仍然相同。

  • 我读了Patterson的以下声明 随着处理器进入更长的流水线并在每个时钟周期发出多条指令,分支延迟变得更长,单个延迟槽是不够的。 我可以理解为什么“每个时钟周期发出多条指令”会导致单个延迟槽不足,但我不知道为什么“更长的管道”会导致它。 另外,我不明白为什么更长的管道会导致分支延迟变得更长。即使管道更长(完成一条指令的步骤),也不能保证周期会增加,那么为什么分支延迟会增加呢?

  • 问题内容: console.log(0.5 | 0); // 0 console.log(-1 | 0); // -1 console.log(1 | 0); // 1 为什么返回零,但任何整数(包括负数)都返回输入整数?单个管道(“ |”)有什么作用? 问题答案: 这是按位或。 由于按位运算仅对整数有意义,因此将被截断。 是,对于任何人。

  • 我试着看文档,但不明白第二个论点是什么。我知道。sort(array,1,4)表示从索引1到3进行排序。但是在这种情况下,带有<代码>的箭头-

  • 问题内容: 我想我了解Lisp宏及其在编译阶段的作用。 但是在Python中,您可以将一个函数传递给另一个函数 因此,我们在这里得到了懒惰的评估。我可以使用宏而不是使用函数作为一流对象怎么办? 问题答案: 首先,Lisp也具有一流的功能,因此您也可以问:“如果我已经具有一流的功能,为什么在Lisp中需要宏”。答案是一流的函数不允许您使用语法。 从表面上看,一流的函数允许您编写或,但不允许编写。尽管