相关疑难解决方法(0)

Java"Bit Shifting"教程?

我会感谢一个很好的教程,为Java新手解释如何在java中所有的"位移"工作.

我总是偶然发现它,但从未理解它是如何工作的.它应该解释java中使用byteshifting/bitmanipulation可能实现的所有操作和概念.

这只是我的意思的一个例子,(但我正在寻找一个解释每个可能的操作的教程):

byte b = (byte)(l >> (8 - i << 3));
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation bit-shift

46
推荐指数
6
解决办法
9万
查看次数

Java中的Double Greater Than Sign(>>)?

这个>>符号在Java中意味着什么?我以前从未见过它,但今天遇到它.我尝试在Google上搜索它,但没有找到任何有用的东西.

java

37
推荐指数
5
解决办法
5万
查看次数

如何在C中仅设置某个字节的某些位而不影响其余位?

假设我有一个类似于1010XXXX的字节,其中X值可以是任何值.我想将低4位设置为特定模式,比如1100,同时保持高4位不受影响.如何在C中以最快的速度完成这项工作?

c byte bitmask

19
推荐指数
2
解决办法
3万
查看次数

如何使用c替换位域中的位而不影响其他位

我想在32/64位数据字段中替换位/位(大于1)而不影响其他位.例如:

我有一个64位寄存器,其中第5位和第6位可以取值0,1,2,3.

5:6    
0 0
0 1
1 0
1 1     
Run Code Online (Sandbox Code Playgroud)

现在,当我读取寄存器时,我得到值0x146(0001 0 10 0 0110).现在我想将第5位和第6位的值更改为01.(现在它是10,十进制是2,我想要在没有其他位受到影响的情况下将其替换为1 e 01)并仅在修改了位5和6的情况下写回寄存器(因此在更改后变为126)

我试过这样做

reg_data=0x146
reg_data |= 1 << shift   (shift in this case is 5)
Run Code Online (Sandbox Code Playgroud)

如果我在位5和6处执行该值将变为11(0x3)而不是01(0x1),这是我想要的.

  • 我如何进行读/修改/写?
  • 如何在不影响使用C的字段的整个数据的情况下,仅替换32/64位字段中的某些位/位?

设置一点是可以的,但不止一点,我发现它有点困难.

任何建议都非常感谢.

c bit-manipulation

18
推荐指数
3
解决办法
3万
查看次数

C#Big-endian ulong来自4个字节

我试图在C#中将一个4字节数组转换为ulong.我目前正在使用此代码:

atomSize = BitConverter.ToUInt32(buffer, 0);
Run Code Online (Sandbox Code Playgroud)

字节[4]包含:

0 0 0 32

但是,字节是Big-Endian.有没有一种简单的方法可以将这个Big-Endian ulong转换为Little-Endian ulong?

c# integer endianness

13
推荐指数
4
解决办法
2万
查看次数

如何在任何语言的整数中的特定位置翻转一下

我有一个整数n,我想k在其二进制表示中翻转它(从最低位).我该怎么做?

例如,如果我有n=0b01101k=2,那么结果是0b01001=9

任何语言都可以.谢谢.

c python java

12
推荐指数
2
解决办法
2万
查看次数

如何在C++中访问数字的符号位?

我希望能够在C++中访问数字的符号位.我当前的代码看起来像这样:

int sign bit = number >> 31;
Run Code Online (Sandbox Code Playgroud)

这似乎有效,给了我0正数和-1负数.但是,我不知道如何得到-1负数:如果是12

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1100
Run Code Online (Sandbox Code Playgroud)

然后-12是

1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0011
Run Code Online (Sandbox Code Playgroud)

将它移位31位就可以了

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
Run Code Online (Sandbox Code Playgroud)

这是1,而不是-1,所以当我转换它时为什么我得到-1?

c++ binary bitwise-operators

10
推荐指数
4
解决办法
1万
查看次数

10
推荐指数
2
解决办法
1987
查看次数

除了快速数学之外,有没有什么好理由使用位移?

我理解按位操作以及它们如何用于不同目的,例如权限.但是,我似乎不明白比特移位运算符的用途.我理解他们是如何工作的,但我想不出任何我可能想要使用它们的场景,除非我想做一些非常快速的乘法或除法.有没有其他理由使用位移?

bit-manipulation bit-shift

9
推荐指数
3
解决办法
4645
查看次数

逐位读取二进制文件

我知道下面的功能:

size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
Run Code Online (Sandbox Code Playgroud)

它只能逐字节读取,我的目标是能够一次读取12位然后将它们放入一个数组中.任何帮助或指针将不胜感激!

c binary file bin

9
推荐指数
1
解决办法
3万
查看次数