侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

java取反 -右移-左移-无符号右移的探讨

Java  /  管理员 发布于 3年前   196

取反:在二进制中第一位,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

 


  • 上一条:
    java.io操作 DataInputStream和DataOutputStream基本数据流
    下一条:
    Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • java正则表达式彻底研究(0个评论)
    • java正则表达式验证函数(0个评论)
    • MVC、MVP和MVVM分别是什么(0个评论)
    • java 单例模式(饿汉模式与懒汉模式)(0个评论)
    • 近期文章
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 在go语言中用filepath.Match()函数以通配符模式匹配字符串示例(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 百度文心一言今天发布,个人第一批内测体验记录,不好别打我(0个评论)
    • 嘿加密世界让我们谈谈在共识中将中本聪主流化(0个评论)
    • 在go语言中寻找两个切片或数组中的相同元素/共同点/交集并集示例代码(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-11
    • 2018-03
    • 2020-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客