对一个字节执行位取反操作

7
我正在尝试对一个字节执行按位非操作,像这样:

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

这段代码无法起作用,因为not运算符只能用于整型数据。我可以采用下面的方式,这样看上去似乎会起作用:

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

这种方法有效是因为它将数字转换成二进制后,清零第8位后的所有比特位,再将其转换为字节。但我想知道是否有更好的方法或者我是否忽略了一些更简单的方法?


你的分辨率已经达到了最好的水平。C#似乎不完全支持除int以外的类型上的位运算,因为结果总是被强制转换为int,所以需要你作为程序员来修复微软的疏忽,通过掩码操作和将其转换回你想要的类型。 - Jim Fell
3个回答

5

看起来Lynx并没有计划更新他的答案,所以作为以后的参考,位运算符在byte上可以正常使用。它们只返回一个int,这不能赋值给类型为byte的变量。你只需要进行一次强制转换:

byte notb = (byte)~b;

1

这个比你写的更清晰易懂。我已经阅读了一些关于这个问题的主题,但似乎在字节上不能真正使用按位取反。

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

你可以使用按位非运算符。byte类型是无符号的,这意味着它的范围从0到255。正如你在计算器中看到的那样,125 => 0b_0111_1101;而取反则为 byte byte_not125 = 0b_1000_0010; // 130 - Reiner

0

这将会起作用

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

这是将 b 强制转换为 int,然后执行 ~ 并将其强制转换回 byte

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接