不按字节执行按位

时间:2014-05-04 07:27:16

标签: c# bitwise-operators

我试图在一个字节上执行按位,如下所示:

byte b = 125;
byte notb = ~b; // Error here

这不起作用,因为not运算符仅适用于整数类型。我可以做到这一点,这似乎有效:

byte b = 125;
byte notb = (byte)((~b) & 255);

这似乎有效,因为它不是数字,然后将第8位之后的所有位翻转为0,然后将其转换为字节。我想知道的是,如果有更好的方法来做这个或更简单的方式,我只是忽略?

3 个答案:

答案 0 :(得分:5)

Lynx似乎不打算更新他的答案,因此为了将来参考,按位运算符在byte上运行正常。它们只返回一个int,它不能赋值给byte类型的变量。你只需要一个演员:

byte notb = (byte)~b;

答案 1 :(得分:2)

这基本上比你写的更好,因为它更清楚。我已经阅读了一些关于这个问题的主题,但似乎你不能在一个字节上使用按位。

byte b = 125;
byte notb= (byte)~b; // result is 130

答案 2 :(得分:0)

这将有效

byte b = 125;
byte notb = (byte)~(int)b;

这是将b投射到int,然后执行~并将其投回byte

我已经验证了结果。您和我的代码都会输出130