我有以下Java代码:
byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;
Run Code Online (Sandbox Code Playgroud)
打印时结果是254,但我不知道这段代码是如何工作的.如果&运算符只是按位,那么为什么它不会产生一个字节而是一个整数呢?
例如:
int get(int i) {
int res = 0;
while (i) {
res = (res + tree[i]) % MOD;
i -= ( (i) & (-i) );
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
树更新功能:
void update(int i, int val) {
while (i <= m) {
tree[i] = (tree[i] + val) % MOD;
i += ( (i) & (-i) );
}
}
Run Code Online (Sandbox Code Playgroud)
你能用它解释一下他们在代码中做了什么( (i) & (-i) )吗?
我正在尝试分配:"在不使用sizeof()函数的情况下查找无符号整数数据类型中的位数."
我的设计是将整数转换为位然后计算它们.对于前:10 is 1010和5 is 101
将整数转换为位表示形式显示如下:
do
{
Vec.push_back( x & 1 )
}
while ( x >>= 1 );
Run Code Online (Sandbox Code Playgroud)
我不想只是复制粘贴的东西.当我使用F-10时,我看到(x & 1)正在做什么,但我不知道它是名字还是它如何完成它的工作(比较一些东西?).我也知道>=哪个"大于或等于"但是什么x >>= 1?
注意:标记的副本是JavaScript而不是C++
c++ bit-manipulation bit-shift bitwise-operators bitwise-and
1011000111011010)的低阶位起作用?教练说:"当你把mod变为2的幂时,你只需要取其低阶位".我太害怕问他的意思了=)
我遇到了一个有趣的场景,根据正确的操作数类型我得到了不同的结果,我无法理解它的原因.
这是最小的代码:
#include <iostream>
#include <cstdint>
int main()
{
uint16_t check = 0x8123U;
uint64_t new_check = (check & 0xFFFF) << 16;
std::cout << std::hex << new_check << std::endl;
new_check = (check & 0xFFFFU) << 16;
std::cout << std::hex << new_check << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在Linux 64bit上使用g ++(gcc版本4.5.2)编译了这段代码:g ++ -std = c ++ 0x -Wall example.cpp -o example
输出是:
ffffffff81230000
81230000
我无法真正理解第一种情况下输出的原因.
为什么在某些时候将任何时间计算结果提升为带符号的64位值(int64_t),从而导致符号扩展?
如果16位值在第一位左移16位然后提升到64位值,我会在两种情况下都接受'0'的结果.如果编译器首先提升checkto uint64_t然后执行其他操作,我也接受第二个输出.
但是如何&使用0xFFFF(int32_t)和0xFFFFU(uint32_t)会导致这两个不同的输出?
Java有二进制或 |与二进制和 &运营商:
int a = 5 | 10;
int b = 5 & 10;
Run Code Online (Sandbox Code Playgroud)
它们似乎不适用于Kotlin:
val a = 5 | 10;
val b = 5 & 10;
Run Code Online (Sandbox Code Playgroud)
如何在Kotlin中使用Java的按位运算符?
对于这个问题,在这段代码中,不与0xff进行逐位AND运算实际上意味着返回相同的值吗?
byte[] packet = reader.readPacket();
short sh;
sh = packet[1];
sh &= 0xFF;
System.out.print(sh+" ");
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果不包括ANDing,那么我得到-1,但是当包含255时可以解释原因吗?
正如我所看到的,0xff只是1111 1111.不是吗?
我试图提取输入图像的蓝色.为此,我使用该命令创建蓝色HSV颜色边界和阈值HSV图像
mask_img = cv2.inRange(hsv, lower_blue, upper_blue)
之后,我在输入图像和阈值图像上使用了bitwise_and
res = cv2.bitwise_and(img,img,mask = mask_img)
'img'是输入图像的位置.这段代码我是从opencv获得的.但是我不明白为什么在bitwise_and中使用了三个参数,实际上每个参数是什么意思?为什么在src1和src2使用相同的图像?
而且这里有mask关键字的用途是什么?请帮我找出答案
我有两个目的,a并且b,每个都包含在一个字节对象中的单个字节.
我试图对此进行逐位操作以获得两个最重要的位(big-endian,所以在左边).
a = sock.recv(1)
b = b'\xc0'
c = a & b
Run Code Online (Sandbox Code Playgroud)
然而,它愤怒地吐TypeError在我的脸上.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'bytes' and 'bytes'
Run Code Online (Sandbox Code Playgroud)
有没有什么办法可以对两个字节执行AND操作而不必考虑主机系统的字节顺序?
bitwise-and ×10
c++ ×3
java ×3
byte ×2
python ×2
bit ×1
bit-shift ×1
bitwise-or ×1
c ×1
c# ×1
c++11 ×1
fenwick-tree ×1
integer ×1
kotlin ×1
math ×1
opencv ×1
python-3.x ×1
short ×1