我试图在一个字节上执行按位,如下所示:
byte b = 125;
byte notb = ~b; // Error here
这不起作用,因为not运算符仅适用于整数类型。我可以做到这一点,这似乎有效:
byte b = 125;
byte notb = (byte)((~b) & 255);
这似乎有效,因为它不是数字,然后将第8位之后的所有位翻转为0,然后将其转换为字节。我想知道的是,如果有更好的方法来做这个或更简单的方式,我只是忽略?
答案 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
。