Java的按位相与有点疑惑

img


输出结果不是应该是1吗?

首先~是按位取反,不是相与&
在java中int型占用4字节,所有的字面整型常量,没有特别后缀一律当做int型。
即整型常量0b11111110实际的内存形式是这样的
00000000 00000000 00000000 11111110
~0b11111110的值是下面这样存储的
11111111 11111111 11111111 00000001
因为负数存储的是反码形式,还原成原码就是下面这样(减一再取反)
10000000 00000000 00000000 11111111
对应的十进制也就是-255

要实现你要的效果你应该这么定义
byte c = (byte) ~0b11111110;

img


请问那意思是这个PPT的是错了吗?应该用byte 吗?