标签: bit-shift

Rust的移位运算符的确切语义是什么?

我试图找到有关<<>>运算符如何处理整数的确切信息,但我找不到一个明确的答案(文档在这方面并不是那么好).

语义的两个部分对我来说并不清楚.首先,哪些位"移入"?

  • 零从一侧(即0b1110_1010u8 << 4 == 0b1010_0000u8)移入,或
  • 比特旋转(即0b1110_1010u8 << 4 == 0b1010_1110u8),或
  • 它是未指定的(如整数的溢出行为未指定),或
  • 别的.

此外,移位如何使用有符号整数?符号位是否也参与了班次?或者这是未指定的?

bit-shift rust

14
推荐指数
2
解决办法
3221
查看次数

在.NET中移动符号位

我正在从单色位图中读取位.我short以相反的顺序将每16位存储在a 中.如果位图中的位为黑色,则存储1.如果为白色,则存储0.

例如:对于位图:bbbw bbbw bbbw wwww
我的简称是:0000 0111 0111 0111

我尝试这样做的第一种方式是:

short m;
// ...
Color c = bmp.GetPixel(j, i);
if (c.R == Color.Black)
    m |= short.MinValue;
m >>= 1;
// ...
Run Code Online (Sandbox Code Playgroud)

经过一次任务和班次后,我得到了预期的-32768(1000 0000 0000 0000).
第二次我得到-16384(1100 0000 0000 0000).

我更改了我的代码使用ushort并将if行更改为s |= (ushort)Math.Pow(2, 15);现在它的工作原理.

我的问题是:为什么标志位不会在.NET中转移?有没有办法改变标志位?

.net c# bit-shift

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

为什么Java`BitSet`没有`shiftLeft`和`shiftRight`函数?

是否有任何特殊原因导致这些缺失?

它们确实存在BigInteger,但由于它们的不可变设计模式BigInteger通常非常慢.BitSet是好得多,因为它是可变的,但我真的很怀念shift功能(<<>>>longS).因为BitSet,就地移位也是有用的,以及循环旋转.

我已经看到了对Shifting a Java BitSet的回复(get(off, len)用于移位;但这需要复制).

别误会我的意思.我知道在哪里报告错误.我只是想知道是否有一个特别的理由要省略它们,例如一些设计模式或这样的概念.特别是因为它们包括在内BigInteger.

java bit-shift bitset

13
推荐指数
1
解决办法
2879
查看次数

Go语言中的>>含义是什么?

我正在寻找有关Google Go语言的信息.在"A Tour of Go"中他们有这样的代码:

const (
    Big = 1<<100
    Small = Big>>99
)
Run Code Online (Sandbox Code Playgroud)

但是做什么<<>> 意味着什么?

您可以在http://tour.golang.org/#14上查看所有代码

programming-languages bit-shift go bitwise-operators

13
推荐指数
3
解决办法
6110
查看次数

使用位移重新实现模数?

我正在为一个非常有限的系统编写一些代码,其中mod运算符非常慢.在我的代码中,模数需要每秒使用大约180次,并且我认为尽可能地删除它会显着提高代码的速度,因为现在我的主循环的一个循环不会在1/60的情况下运行应该是第二个.我想知道是否有可能仅使用乘法和除法可能的位移来重新实现模数.所以这是我目前在c ++中的代码(如果我可以使用汇编执行模数,那就更好了).如何在不使用除法或乘法的情况下删除模数?

    while(input > 0)
{
    out = (out << 3) + (out << 1);
    out += input % 10;

    input = (input >> 8) + (input >> 1);
}
Run Code Online (Sandbox Code Playgroud)

编辑:其实我意识到我需要每秒超过180次.看作输入值可以是一个非常大的数字,最多40位数.

c++ optimization bit-manipulation bit-shift modulo

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

Ansi C中的位设置

任何人都可以解释以下语法吗?

#define Bitset(var,bitno) ((var) |=1UL<<(bitno))
Run Code Online (Sandbox Code Playgroud)

我知道它设置的位var,但我无法理解语法.

c bit-manipulation ansi bit-shift bitwise-operators

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

Scala中>>和>>>之间的区别

Scala中的>>和>>>运算符有什么区别吗?

scala> 0x7f >>> 1
res10: Int = 63

scala> 0x7f >> 1 
res11: Int = 63

scala> 0x7f >> 4
res12: Int = 7

scala> 0x7f >>> 4
res13: Int = 7
Run Code Online (Sandbox Code Playgroud)

scala operators bit-shift

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

Java按位运算符<<

有人可以解释为什么以下按位表达式返回不同的结果:

System.out.println((-1<<31)<<1);   // it prints 0
System.out.println(-1<<32);        // it prints -1
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation bit-shift

13
推荐指数
1
解决办法
187
查看次数

对于Java中的整数,为什么-1为零填充右移1 = 2147483647?

对于以下程序:

public class ZeroFillRightShift
{
  public static void main(String args[])
  {
    int x = -1;
    int y = x>>>1;
    System.out.println("x = " + x);
    System.out.println("y = " + y);
  }
Run Code Online (Sandbox Code Playgroud)

我得到如下输出:

x = -1
y = 2147483647
Run Code Online (Sandbox Code Playgroud)

我得到的结果-1>>>1是2147483647.如果它是必须移位的符号位,正如我所知,结果应该是1073741824.为什么它是2147483647呢?

下图更清楚地说明了我的问题:

样本图片

java bit-shift

12
推荐指数
1
解决办法
864
查看次数

.Net 4.6打破了XOR密码模式?

在.NET 4.5中,这种密码在32位和64位架构上运行良好.将项目切换到.NET 4.6会在64位中完全破解此密码,而在32位中,这个问题会出现奇怪的补丁.

在我的方法"DecodeSkill"中,SkillLevel是在.NET 4.6上打破的唯一部分. 这里使用的变量从网络流中读取并进行编码.

DecodeSkill(始终为SkillLevel返回正确的解码值)

    private void DecodeSkill()
    {
        SkillId = (ushort) (ExchangeShortBits((SkillId ^ ObjectId ^ 0x915d), 13) + 0x14be);
        SkillLevel = ((ushort) ((byte)SkillLevel ^ 0x21));
        TargetObjectId = (ExchangeLongBits(TargetObjectId, 13) ^ ObjectId ^ 0x5f2d2463) + 0x8b90b51a;
        PositionX = (ushort) (ExchangeShortBits((PositionX ^ ObjectId ^ 0x2ed6), 15) + 0xdd12);
        PositionY = (ushort) (ExchangeShortBits((PositionY ^ ObjectId ^ 0xb99b), 11) + 0x76de);
    }
Run Code Online (Sandbox Code Playgroud)

ExchangeShortBits

    private static uint ExchangeShortBits(uint data, int bits)
    {
        data &= 0xffff;
        return (data …
Run Code Online (Sandbox Code Playgroud)

c# bit-shift xor .net-4.5 .net-4.6

12
推荐指数
1
解决办法
471
查看次数