java取反 -右移-左移-无符号右移的探讨
Java  /  管理员 发布于 4年前   350
取反:在二进制中第一位,1表示符数,0表示正数byte a = -1;原码:10000001反码:11111110补码:11111111 //异或: 00000000byte b = -2;原码:10000010反码:11111101补码:11111110 //异或: 00000001byte c = 3; // 10000101System.out.println(~a);System.out.println(~b);System.out.println(~c);
运算结果:01-4
右移:正数右移.负数右移 ,无符号右移
右移的符号是:>>
无符号右移的符号的:>>>
在左右位移时应注意,位移是否超过了数据的长度,如果超过了就会进行取摸运算等:下面的代码中有测试到
//右移://右移一个正数,右移一个整数每次在左边补0 int a = 5;System.out.println(a>>1); //原码;0000000101//右移一位: 0000000010System.out.println(a>>2); //原码;0000000101//右移两位: 0000000001 System.out.println(a>>3); //原码;0000000101//右移三位: 0000000000 System.out.println(a>>31);//原码; 0000000101//右移32位: 0000000000 System.out.println(a>>32); //int 为32位,当位移等于32时,相当于没有移动,会进行取摸运算 System.out.println(a>>34); //位移大于32时,进行取摸运算 34%32 = 2 //此时相当于位移两位 System.out.println(a>>>1);//无符号右移最高位补0 // 原码: 0000000101 //无符号右移 : 0000000010 2
运算结果:2100512
负数右移:
//右移一个负数,右移一个整数每次在左边补1//位移负数,应先将其装换成补码形式,再位移int a = -5;//原码:100000101//反码:111111010 反码是和原码的数相反 第一位相同(符号位)//补码:111111011 补码在反码后面加1System.out.println(a>>1);//补码:111111011 //补码右移一位: 111111101 -3System.out.println(a>>2);//补码:111111011 //补码右移两位: 111111110 -2System.out.println(a>>3);//补码:111111011 //补码右移三位: 111111111 -1System.out.println(a>>4);//补码:111111011 //补码右移四位: 111111111 -1System.out.println(a>>31);//补码:111111011 //补码右移31位: 111111111 -1System.out.println(a>>32); //int为32 位的数,在位移时,等于没有移动 -5System.out.println(a>>34);//int 为32位的,位移34会进行取摸运算 34%32 =2 -2 System.out.println(a>>>1); //无符号负数的右移在最高位补1;//补码:111111011 //无符号右移1位:011111101 此时负数将变成一个正数
-3-2-1-1-1-5-22147483645
左移:
左移的符号:<<
左移无符号的正负数的符号:<<<
左移的右边补0
//左移正数int a = 5;//补码:00000101System.out.println(a<<1);//00001010 10System.out.println(a<<2);//00010100 20System.out.println(a<<31);//为一个负数,左移应注意
运算结果:1020-2147483648
左移负数:
左移都是右边补0
int a = -5;//补码:11111011 System.out.println(a<<1);//左移一位:11110110 -10System.out.println(a<<2);//左移两位:11101100 -20System.out.println(a<<31);//左移31会出现问题System.out.println(a<<34);//相当于左移两位//左移两位:11101100 -20
运算结果:-10-20-2147483648-20
使用位移来求二进制的问题:
public static void main(String[] args) {//通过右移将十进制的数转换成二进制int a = 100;for(int i =31;i>0;i--){System.out.print(a>>i&1);}}
运算结果:0000000000000000000000000110010
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号