二进制中负数的表示
在二进制中如何表示负数?
例:-1在二进制中的表示为1111
计算:首先-1先转换为正数1,1的二进制为0001
,然后减1得到0000
,然后每一位取反得到1111
那-1的二进制表示就是1111
;
总结:负数的二进制表示为和其对应正数的值-1然后取反
二进制中负数的转换
在二进制中如何把一个数,转换为对应的负数?
例:1110
在对应表示为-2
计算:首先1开头代表是负数,对应的值为连同符号为一起取反得到0001
,然后取反得到的值在加1,得到0010
,那0010
对应的值是2,所以1110
对应的值就是-2;
总结:负数二进制转换为真值需要连同符号位取反然后再加1,得到的值就是对应的负数值
进制直接表示
int a = 0b1110110; // 0b开头可以直接定义二进制数
System.out.println(a);
int x = 0x11546; // 0x定义16进制的数
System.out.println(x);
任何数的相反数可以由取反+1得到
常见位运算操作 |,&,^, >>, >>>, <<
异或运算^,理解为无进位相加即可,
1 ^ 1 = 0; 0 ^ 0 = 0; 1 ^ 0 = 1
性质:0 ^ n = n; n ^ n = 0;
或运算| ,有1则为1,全0则为0
与运算,全1则为1,有0则为0
带符号右移运算>>
,一个数的二进制,往右移动,左侧用符号位来填充
左移<<
, 一个数的二进制,往右移动,右侧用0来填充, 移动一位等价于*2
无符号右移运算>>>
,一个数的二进制,往右移动,左侧用0来填充
对于正数来说 >>和>>>是一样的,负数不一样
lowbit 运算
lowbit运算的作用是返回最后边的一个1,运算是:x & -x
;
如100 & -100 = 4,100值是0000 0100
输出一个数的二进制
private static void printBinary(int x) {
for (int i = 31; i >= 0; i --) {
System.out.print((x & (1 << i) ) == 0 ? 0 : 1);
}
}