首页 > 基础资料 博客日记

运算符--原码、反码、补码

2023-12-22 19:46:51基础资料围观235

本篇文章分享运算符--原码、反码、补码,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识

运算符--原码、反码、补码

原码:

十进制数据的二进制表现形式,最左边是符号位,0为正,1为负。

利用原码对正数进行计算是不会有问题的。

但如果是负数计算,结果就出错,实际运算的结果,跟我们预期的结果是相反的。

原码的弊端:

  • 利用原码进行计算的时候,如果是正数完全没有问题。
  • 但是如果是负数计算,结果就出错,实际运算的方向,跟正确的运算方向是相反的。

反码:

出现的目的:为解决原码不能计算负数的问题而出现的。

计算规则:正数的反码不变,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0。

反码的弊端:负数运算的时候,如果结果不跨0,跟实际结果会有1的偏差。

补码:

出现的目的:为了解决负数计算时跨0的问题而出现的。

计算规则:

  • 正数的补码不变,负数的补码在反码的基础上+1.
  • 另外补码还能多记录一个特殊的值-128,该数据在1个字节下,没有原码和反码。

注意点:计算机中的存储和计算都是以补码的形式进行的。

基本数据类型

数据类型 字节 二进制
byte类型的10 1个字节 0000 1010
short类型的10 2个字节 0000 0000 0000 1010
int类型的10 4个字节 0000 0000 0000 0000 0000 0000 0000 1010
long类型的10 8个字节 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010

隐式转换

public class Test {
    public static void main(String[] args) {
        byet a = 10;//0000 1010
        int b = a;//0000 0000 0000 0000 0000 0000 0000 1010
        System.out.println(b);
    }
}

强制转换

public class Test {
    public static void main(String[] args) {
        int a = 300;//0000 0000 0000 0000 0000 0001 0010 1100
        byet b = (byet) a;//0010 1100
        System.out.println(b);//44
    }
}
public class Test {
    public static void main(String[] args) {
        int a = 200;//0000 0000 0000 0000 0000 0000 1100 1000
        byet b = (byet) a;//1100 1000
        System.out.println(b);//-56
    }
}

其他运算符

运算符 含义 运算规则
& 逻辑与 0为false,1为true
| 逻辑或 0为false,1为true
<< 左移 向左移动,地位补0
>> 右移 向右移动,高位补0或1
>>> 无符号右移 向右移动,高位补0

文章来源:https://www.cnblogs.com/Y423x/p/17922267.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云