• 原码、补码,反码以及JAVA中数值采用哪种码表示


    原码、补码,反码以及JAVA中数值采用哪种码表示

       

       1.原码定义(摘自百度百科):一种计算机中对数字的二进制定点表示方法,原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1,

         举例:2->00000010,-2->10000010,+0->00000000,-0->10000000;

        小数的原码:对十进制小数乘以2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分,结果再取整数部分,如此反复,直到小数部分为0或达到精度为止。第一次得到的为最高位,最后一次得到为最低位。

       2.补码(摘自百度百科):在计算机系统中,数值一律用补码来表示和存储

        举例(二进制):整数补码(正整数补码与原码相同)  +9的补码是00001001,负数补码   -5:11111011(求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1)

             数0的补码表示是唯一的:00000000

             小数的补码:正数的补码与原码相同,负数的补码规则与负整数相同,举例:0.1011为正数,补码与原码真值一致。仍为0.1011,-0.0101为负数,补码为1.1011

       3.反码(二进制):正数反码:正数的反码与原码相同。负数:负数的反码,符号位为“1”,数值部分按位取反。举例:7-> 0 0000111 ,-7-> 1 1111000

       4.首先先猜想是由原码表示,程序验证

    1         int a=1;
    2         int b=-1;
    3         int sum=a+b;
    4         System.out.println(sum);

          可知程序的结果为0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错,故java中数值并非是由原码储存

          同理,在使用反码表示时,也会出现同样的问题: (00000001) 反+ (11111110)反 = (11111111)反 = ( -0 )

          而在补码中这没有这个问题:(00000001)补 + (11111111)补 = (00000000)补 = ( 0 )

          所以在java中,数值是由补码表示的

  • 相关阅读:
    【Android】: 部分注意事项
    【Java】:多线程下载
    【操作系统】:Main features of the X86-64
    「数据结构」:模拟指针(simulated pointer)
    「JAVA」:Berkeley DB的JAVA连接
    「python」: arp脚本的两种方法
    「数据结构」: 间接寻址
    「操作系统」: Conditional Move Instructions(trap)
    「操作系统」:The most useful condition codes
    quartz定时任务时间设置
  • 原文地址:https://www.cnblogs.com/heiyang/p/9748054.html
Copyright © 2020-2023  润新知