一 数据储存形式
二进制在内存中以补码的形式存在。
补码首位是符号位,0表示该数是正数,1表示该数是负数。
例如:
数值 |
带符号的二进制原码 (首位表示符号位) |
补码 |
内存中的形式 (*表示无效位,其数量取决于分配的内存空间) |
9 | 01001 | 01001 | 0***1001 |
-1 | 11 | 11 | 1***1 |
二 补码是什么
正数: 补码 = 反码 = 原码
负数: 原码取反 = 反码,反码+1 = 补码
??运算时: 符号位不变,有效位进行运算!带*号的为无效位。
例如:
原码 | 反码 | 补码 | |
9 | 01001 | 01001 | 01001 |
-5 | 1***101 | 1***010 | 1***011 |
原码中: 9的有效位为1001,5的有效位为101。
三 计算机输出数据的方式
转换
内存中补码 ———————> 原码 (显示)
四 按位取反运算符"~"的原理
按位取反: 将内存中的补码按位取反,包括符号位!!
例如:
按位取反~ 原码显示
9 ----> 补码 0***1001 ------------> 补码 1***0110 ------------> 1***1010 (-10)
按位取反~ 原码显示
-1 ----> 补码 1***1 -------------> 补码 0***0 -----------> 0 (补码是正数,所以原码也为0)
参考: https://www.cnblogs.com/pxb2018/p/9765849.html
Java按位运算符之按位取反
原文地址:https://www.cnblogs.com/CTW42/p/12375142.html
时间: 2024-10-01 01:37:06