我想知道是否可以在MySQL查询中进行按位OR.我有一个查询:
SELECT `value` FROM `table` WHERE `code`='4'
Run Code Online (Sandbox Code Playgroud)
它返回一个值数组,但我想要一个唯一值,其值为所有值的按位 OR.可以从MySQL或我应该委托给PHP吗?
即上面的查询返回此值列表:
value
-----
1
5
4
2
7
8
Run Code Online (Sandbox Code Playgroud)
我希望结果是这些值1的OR 5 | 4 | 2 | 7 | 8 = 15
这更像是一个哲学问题,但我在代码库中已经多次看到这一点,并且并不真正理解这种编程方法是如何形成的.
假设您必须将位2和3设置为某个值x而不更改uint中的其他值.这样做是非常微不足道的,也是一项常见的任务,我倾向于这样做:
uint8_t someval = 0xFF; //some random previous value
uint8_t x = 0x2; //some random value to assign.
someval = (somval & ~0xC) | (x << 2); //Set the value to 0x2 for bits 2-3
Run Code Online (Sandbox Code Playgroud)
我见过代码或使用'|' 使用'+':
uint8_t someval = 0xFF; //some random previous value
uint8_t x = 0x2; //some random value to assign.
someval = (somval & ~0xC) + (x << 2); //Set the value to 0x2 for bits 2-3
Run Code Online (Sandbox Code Playgroud)
它们是等价的吗?
是.
这个比那个好吗?
仅当您的硬件没有按位OR指令时,我才从未见过没有按位OR的处理器(即使是小型PIC10处理器也有OR指令).
那么为什么有些程序员倾向于使用'+'代替'|'?我在这里错过了一些非常明显,优秀的强大优化吗?
我遇到了一个java代码,其中常量已按以下方式定义
static final char FM = (char) (ConstantsSystem.DOUBLE_BYTE_SEP | 0xFE);
Run Code Online (Sandbox Code Playgroud)
什么是使用|这个代码?
所以,我仍在学习按位运算,无法弄清楚为什么会发生此错误。我在谷歌上搜索过它,看起来这个错误可能是在弄乱堆栈时发生,或者在某些情况下,它与 CPU 架构有关。我试过用不同的标志进行编译,这些标志应该有帮助,但我无法让它工作。
这是快速的代码:
int corners = 0;
for (int i = 0; i < 8; i++)
{
const ivec3 cornerPos = leaf->min + CHILD_MIN_OFFSETS[i];
const float density = Density_Func(vec3(cornerPos));
const int material = density < 0.f ? MATERIAL_SOLID : MATERIAL_AIR;
corners |= (material << i);
}
Run Code Online (Sandbox Code Playgroud)
并且错误“非法指令(核心转储)”发生在该行
corners |= (material << i);
这是调试器的输出:
Signal received: SIGILL (Illegal instruction) For program, pid 26,118
Run Code Online (Sandbox Code Playgroud)
我将给出这个循环的输出(它永远不会超过第一个循环)。这是 couts 的代码:
int corners = 0;
std::cout<<"corners(outside loop): "<<corners<<std::endl;
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 当涉及到 C++ 中的布尔变量时,按位运算和逻辑 OR 运算有什么区别?在整数域中,这是很清楚的,但是当涉及到布尔值时,它们两者之间是否有任何性能优势或行为变化?
布尔 VAR = TRUE , BOOL VAR2= TRUE
VAR有区别吗| VAR2 和 VAR || VAR2
假设我有以下代码:
[somevalue_field
addTarget:self
action:@selector(somevalue_fieldDidChange:)
forControlEvents:UIControlEventEditingDidEnd | UIControlEventTouchDragExit |
UIControlEVentTouchDragOutside ];
Run Code Online (Sandbox Code Playgroud)
这些UIControlEvents的按位ORing是否实际上在组合它们的效果方面一起工作,这样如果这些事件中的任何一个发生,选择器中的方法将触发?
或者是否会导致太多位串在一起以适合一个整数?
我得到了这个想法,因为eclipse(Java)它显示了向catch子句添加多个异常的可能性,如下所示:
String someInput;
int int1;
try {
int1 = Integer.parseInt(someInput);
} catch (NullPointerException | NumberFormatException e) {
e.printStackTrace;
}
Run Code Online (Sandbox Code Playgroud)
那么这是否意味着我也可以这样做?:
boolen bool1 = (int1 == (int2 | int3));
Run Code Online (Sandbox Code Playgroud)
或者像这样投射一个物体?:
(obj1 | obj2) someObject;
Run Code Online (Sandbox Code Playgroud)
或者总是指定像这样的对象?:
obj1 | obj2 someName;
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何答案,艾伦
我正在使用PHP 7.2.8
我执行以下代码:
<?php
phpinfo(2 | 8); //Bitwise OR operator is used
?>
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,并给了我预期的结果。
然后,我尝试将数值常量按位值作为参数传递,即将数字2和8的二进制等效项作为参数传递。请看下面的代码:
<?php
phpinfo(00000010 | 1000000); //Bitwise OR operator is used
?>
Run Code Online (Sandbox Code Playgroud)
我得到了上述代码的意外输出(即,第二个代码中传递了数字常量的按位值)。
为什么这样?
请参阅此链接,以获取有关要传递给phpinfo()函数的参数的描述以及要传递的每个数字常量的含义的信息。
请让我知道我在哪里出错了?我只是想按照手册中的描述执行代码。
谢谢。
我试图理解 React 源代码,代码库中的许多文件将我引导到共享/ReactTypes.js 文件。
在该文件中,有一个符号“|”
根据我自己的研究,我发现这是按位 OR (|) 运算符,解释该运算符的 MDN 文档指出:
在任一操作数或两个操作数的对应位为 1 的每个位位置返回 1。
这对我来说没有任何意义,所以我继续在网络上进行一些研究,包括 Google 和 Stackoverflow,但我在 React 的源代码中找不到任何与其功能相关的内容。
export type ReactNode =
| React$Element<any>
| ReactPortal
| ReactText
| ReactFragment
| ReactProvider<any>
| ReactConsumer<any>;
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释一下这一点,或者至少给我发送一些资源来帮助我了解此 React 源代码中发生的情况。
另外,如果您知道重现此代码的任何方法,请告诉我。
提前致谢!!
我无法理解为什么操作 'c | 11100000' 似乎不起作用。但我也注意到 'c | 10000000' 按预期工作。
#include <stdio.h>
int main()
{
unsigned char c, c1;
c = c & 0;
c = c | 11100000;
printf("%o \t", c);
/** prints 140 ***/
c = c & 0;
c = c | 111;
c << 5;
printf("%o", c);
/** prints 157 **/
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想反转数字中的位值。
该方法应该按位数反转值,如下所示:
public static void main(String[] args) {
int res = flipBit(7,1);
}
public static int flipBit(int value, int bitIndex) {
String bin = Integer.toBinaryString(value);
char newChar = (char) (bin.charAt(bitIndex) ^ bin.charAt(bitIndex));
//pseudo code
bin[bitIndex] = newChar;
return Integer.parseInt(bin);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试重写以下代码:
$ cat t.c
int main()
{
unsigned int i = 0;
int v = 3;
i |= v;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用最近的gcc,您应该收到以下警告:
$ gcc -Wconversion t.c
t.c: In function ‘main’:
t.c:5:3: warning: conversion to ‘unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]
Run Code Online (Sandbox Code Playgroud)
在保持代码可读性的同时,我应该如何重写按位OR以避免此警告.unsigned int i是库代码中非常深的东西,所以我无法将其更改为int.
#include<stdio.h>
int main()
{
int const SIZE=5;
int expr;
double value[SIZE]={2.0,4.0,6.0,8.0,10.0};
expr=1|2|3|4;
printf("%f",value[expr]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何评估上述代码?特别声明:
expr=1|2|3|4;
Run Code Online (Sandbox Code Playgroud) bitwise-or ×13
bit-shift ×3
c ×3
c++ ×3
java ×3
boolean ×2
add ×1
c++14 ×1
casting ×1
constants ×1
function ×1
identifier ×1
integer ×1
ios ×1
logical-or ×1
mysql ×1
objective-c ×1
php ×1
phpinfo ×1
reactjs ×1