取反、原码、补码、位操作符

取反、原码、补码、位操作符一 取反 010101 二 原码 符号位 第一位 用 0 表示正数 用 1 表示负数 注意 正数的原码 就是它在计算机中的表示 如 12 的原码和二进制表示 负数的原码和它在计算机中的表示不一样 负数的原码是对应的正数符号位取反 而负数在计算机中的表示是负数的补码

大家好,我是讯享网,很高兴认识大家。

一、取反

~=010101

 

二、原码

符号位(第一位):用0表示正数,用1表示负数

 

注意:

  • 正数的原码 就是它在计算机中的表示。如12的原码和二进制表示
  • 负数的原码和它在计算机中的表示不一样。负数的原码是对应的正数符号位取反,而负数在计算机中的表示是负数的补码。

 

三、补码

  • 负数:对负数的原码来说,符号位不变,其他位取反加1
例子:-12的补码 ①-12对应正数12(0000 1100)→所有位取反(1111 0011)→+1(1111 0100) ②-12对应的负数-12的原码(1000 1100)→符号位不变,其他位取反(1111 0011)→+1(1111 0100)

讯享网

 

  • 正数的补码是本身
讯享网计算负数时用到: 11-12 =11+(-12) =0000 1011+1111 0100(补码化) =1111 1111(竖式计算) =-1(补码化原码:减1,符号位不变,其他位取反)

 

四、带符号数据

带符号数据:1000 1010=-10

不带符号数据:1000 1010=138

五、位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。

运算符,是按照二进制格式来运算。

 

假设a = 60,b = 13;它们的二进制格式表示将如下:

A = 0011 1100

B = 0000 1101

操作符

描述

例子

与运算符(&)

如果相对应位都是1,则结果为1,否则为0

A&B得到12,即0000 1100

或运算符(|)

如果相对应位都是0,则结果为0,否则为1

A | B得到61,即 0011 1101

异或运算符(^)

如果相对应位值相同,则结果为0,否则为1(异或,异才为1)


讯享网

(A ^ B)得到49,即 0011 0001

非与运算符(~)

/按位取反运算符

翻转操作数的每一位,即0变成1,1变成0。

(〜A)得到-61,即1100 0011

左移运算符(<<)

/按位左移运算符

左操作数按位左移右操作数指定的位数。低位补零

x<<y相当于x*2^y(x乘以2的y次方)

A << 2得到240,即 1111 0000

有符号右移运算符(>>)

按位右移运算符

(算术右移运算符)

左操作数按位右移右操作数指定的位数。低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

x<<y相当于x/2^y(x除以2的y次方)

A >> 2得到15即 0000 1111

无符号右移运算符(>>>

按位右移补零操作符

(逻辑右移运算符)

左操作数的值按右操作数指定的位数右移低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同移动得到的空位以零填充。

 

 //有符号右移运算符(>>)与无符号右移运算符(>>>)的代码: System.out.println(Integer.toBinaryString(4>>2)); System.out.println(Integer.toBinaryString(-4>>2)); //1 // System.out.println(Integer.toBinaryString(4>>>2)); System.out.println(Integer.toBinaryString(-4>>>2)); //1 //

PS:移位运算符的右操作数要完成模 32 的运算(除非左操作数是 long 类型, 在这种情

况下需要对右操作數模 64 )。例如, 1 «35 的值等同于 1 «3 或 8。

 

小讯
上一篇 2025-03-23 07:06
下一篇 2025-03-10 11:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/46525.html