2020-02-03

二进制算法

1.java中计算机算法

有符号算法 源码   反码   补码

二进制中最高位为符号位  正数为0      负数为1

正数的源码、反码、补码都一样

注意0的反码、补码都为0

负数的反码高位符号位不变其他位取反

负数的补码+1

负数的补码-1

反码符号位不变其他取反

在java中没有无符号数,也就是说都是有符号数,计算机在运算时都是以补码的方式运算的

计算机的运算过程1>>2

00000000 00000000 00000000 00000001 

正数的反码补码都是一样的

00000000 00000000 00000000 00000001 

右移2位

00000000 00000000 00000000 00000000

所以1右移两位为0

计算机的运算过程  -1>>2

源码

10000000 00000000 00000000 00000001 

反码 符号位不变其他取反

11111111 11111111 11111111 11111110 

补码  +1

11111111 11111111 11111111 11111111

右移两位 高位以符号位补充 低位溢出

11111111 11111111 11111111 11111111

补码 -1

11111111 11111111 11111111 11111110 

反码->源码 符号位不变其他取反

10000000 00000000 00000000 00000001 

2.与或非异或算法

&与运算  遇0得0   只有两个都为1时为1    列a= 5 & 3

5        0000 0101

3        0000 0011

a=      0000 0001

|或运算  遇1得1  只要两个有一个为1就为1   列a= 5 | 3

5        0000 0101

3        0000 0011

a=      0000 0111

~非运算  各位取反     a=~2

源码-反码-补码都是一样的

00000000 00000000 00000000 00000010

取反

11111111 11111111 11111111 11111101

取反后高位为负数 补码 -1

11111111 11111111 11111111 11111100

反码 ->源码

10000000 00000000 00000000 00000011

a=  -3

^异或运算   两位   相同为0    不行同为1     列a= 5 ^ 3

5        0000 0101

3        0000 0011

a=      0000 0110

>>>无符号右移    列a= 8 >>> 2  右移的如果是负数那么符号位直接为0,高位补零低位溢出

8        0000 1000

a= 0000 0010

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 进制基本概念 什么是进制?进制是一种计数的方式,数值的表示形式 常见的进制十进制、二进制、八进制、十六进制 进制书...
    极客江南阅读 2,165评论 0 11
  • 进制基本概念 什么是进制?进制是一种计数的方式,数值的表示形式 常见的进制十进制、二进制、八进制、十六进制 进制书...
    低头看云阅读 940评论 0 1
  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 3,294评论 1 9
  • 1.编译程序(1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a.o...
    萌面大叔2阅读 1,391评论 0 1
  • 1.编译程序 (1)gcc xx.c,他会默认生成一个a.out的可执行文件,在a.out所在目录,执行./a....
    萌面大叔2阅读 572评论 0 1

友情链接更多精彩内容