当前位置: 首页 > news >正文

原码补码反码与位操作

今天搜索互联网那个引擎了解了原码补码反码的相关概念
原码是最直观的编码方式,用最高位表示符号(0为正,1为负),其余位表示数值的绝对值
正数的反码与原码相同;负数的反码是对其原码的数值位取反(符号位不变)
正数的补码与原码相同;负数的补码是其反码加1
Java中的整数采用补码表示法
public class Demo{
public static void main(String[] args) {
// 定义测试用的正数和负数
int y = 13; // 二进制: 00001101
int b = -13; // 二进制: 11110011 (补码表示)

        // 打印原始数值的二进制表示System.out.println("原始数值:");printBinary("正数13", y);printBinary("负数-13", b);System.out.println();// 位与操作 (&)System.out.println("位与操作 (&):");int andResult = y & b;printOperation("13 & -13", andResult, y, b, "&");System.out.println();// 位或操作 (|)System.out.println("位或操作 (|):");int orResult = y | b;printOperation("13 | -13", orResult, y, b, "|");System.out.println();// 位异或操作 (^)System.out.println("位异或操作 (^):");int xorResult = y ^ b;printOperation("13 ^ -13", xorResult, y, b, "^");System.out.println();// 位非操作 (~)System.out.println("位非操作 (~):");int noty = ~y;int notb = ~b;printOperation("~13", noty, y);printOperation("~-13", notb, b);System.out.println();// 左移操作 (<<)System.out.println("左移操作 (<<):");int leftShiftPos = y << 2;int leftShiftNeg = b << 2;printShiftOperation("13 << 2", leftShiftPos, y, "<<", 2);printShiftOperation("-13 << 2", leftShiftNeg, b, "<<", 2);System.out.println();// 算术右移操作 (>>)System.out.println("算术右移操作 (>>):");int rightShiftPos = y >> 2;int rightShiftNeg = b >> 2;printShiftOperation("13 >> 2", rightShiftPos, y, ">>", 2);printShiftOperation("-13 >> 2", rightShiftNeg, b, ">>", 2);System.out.println();// 逻辑右移操作 (>>>)System.out.println("逻辑右移操作 (>>>):");int unsignedRightShiftPos = y >>> 2;int unsignedRightShiftNeg = b >>> 2;printShiftOperation("13 >>> 2", unsignedRightShiftPos, y, ">>>", 2);printShiftOperation("-13 >>> 2", unsignedRightShiftNeg, b, ">>>", 2);}// 打印二进制表示的辅助方法public static void printBinary(String label, int num) {String binary = String.format("%32s", Integer.toBinaryString(num)).replace(' ', '0');System.out.println(label + " (十进制:" + num + "): " + binary);}// 打印位操作结果的辅助方法public static void printOperation(String operation, int result, int operand1, int operand2, String operator) {System.out.println(operation + " = " + result);System.out.print("二进制运算: ");printBinaryShort(operand1);System.out.print(" " + operator + " ");printBinaryShort(operand2);System.out.print(" = ");printBinaryShort(result);System.out.println("\n");}// 打印位操作结果的辅助方法public static void printOperation(String operation, int result, int operand) {System.out.println(operation + " = " + result);System.out.print("二进制运算: " + operation.charAt(0) + " ");printBinaryShort(operand);System.out.print(" = ");printBinaryShort(result);System.out.println("\n");}// 打印移位操作结果的辅助方法public static void printShiftOperation(String operation, int result, int operand, String shiftOp, int shift) {System.out.println(operation + " = " + result);System.out.print("二进制运算: ");printBinaryShort(operand);System.out.print(" " + shiftOp + " " + shift + " = ");printBinaryShort(result);System.out.println("\n");}// 简短格式打印二进制public static void printBinaryShort(int num) {String binary = Integer.toBinaryString(num);if (binary.length() > 8) {binary = binary.substring(binary.length() - 8);}System.out.print(binary);}

}
手工计算结果-13的逻辑右移和算数右移与java表示结果不一样
经过搜索了解手工8位简算与java32位补码运算完全计算结果不一样,java的结算结果是正确的
我学会了要在分析位运算时,必须考虑数据类型的完整位数(int为32位),简单的8位模型会导致理解偏差。

http://www.hskmm.com/?act=detail&tid=13716

相关文章:

  • 接口
  • 特殊句式
  • 9月22日
  • 20250922
  • 易路斩获招聘、薪酬两大重磅人力资源奖项,尽显行业领军风范!
  • 作业
  • RAG系统嵌入模型怎么选?选型策略和踩坑指南
  • (应该写的比较清晰)D2. Max Sum OR (Hard Version)
  • Linux运维
  • day001
  • 第一次编程作业
  • 7
  • Xilnx FPGA 资源结构
  • 2025年录音转文字技术解析与实用工具评测 - 指南
  • CF2147H Maxflow GCD Coloring 题解
  • Uiverse.io 2.0 震撼发布:新增 3000+ 动效组件!适配 React、Vue
  • 问题及解决方法
  • 2025.9.22
  • 第一天
  • (1-10-2)MyBatis 进阶篇 - 教程
  • 联想拯救者无法登录当前账户
  • WPF二合一平板电脑上屏幕旋转时获取屏幕宽高问题
  • 代码中的善意:构建人性化的软件开发文化
  • 超级恶心的题面 [USACO21OPEN] Portals G
  • 如何隐藏一个元素
  • 昆仑通态触摸屏保存参数到内部存储器并读取的方法成都控制器开发提供
  • helloword
  • 使用reCAPTCHA提升WordPress网站安全性 - 指南
  • 软工9.22
  • 在控制台执行可列出所有placeholder样式