【位运算】位运算和二进制相关转换

二进制中负数的表示

在二进制中如何表示负数?
例:-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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值