java中int型128转换为byte型时输出值为-128详解

首先要知道程序的运行事先要转换成二进制去执行的,如下是电脑使用二进制的原因:

    首先,二进位计数制仅用两个数码。0和1,所以,任何具有二个不同稳定状态的元件都可用来表示数的某一位。而在实际上具有两种明显稳定状态的元件很多。例如,电灯的"亮"和"熄";开关的”开“和”关“; 电压的”高“和”低“、”正“和”负“;纸带上的”有孔“和“无孔”,电路中的”有信号“和”无信号“, 磁性材料的南极和北极等等,不胜枚举。 利用这些截然不同的状态来代表数字,是很容易实现的。不仅如此,更重要的是两种截然不同的状态不单有量上的差别,而且是有质上的不同。这样就能大大提高机器的抗干扰能力,提高可靠性。而要找出一个能表示多于二种状态而且简单可靠的器件,就困难得多了 [8]  

其次,二进位计数制的四则运算规则十分简单。而且四则运算最后都可归结为加法运算和移位,这样,电子计算机中的运算器线路也变得十分简单了。不仅如此,线路简化了,速度也就可以提高。这也是十进位计数制所不能相比的 [8]  。

第三,在电子计算机中采用二进制表示数可以节省设备。可 以从理论上证明,用三进位制最省设备,其次就是二进位制。但由于二进位制有包括三进位制在内的其他进位制所没有的优点,所以大多数电子计算机还是采用二进制。此外,由于二进制中只用二个符号 “ 0” 和“1”,因而可用布尔代数来分析和综合机器中的逻辑线路。 这为设计电子计算机线路提供了一个很有用的工具 [8]  。

第四,二进制的符号“1”和“0”恰好与逻辑运算中的“对”(true)与“错”(false)对应,便于计算机进行逻辑运算

了解了这之后,我们知道java中的byte大小是一个字节, 1字节 = 8比特   二进制中的 0 或者1 = 1个比特

首先我们要把10进制的数字转换成二进制如:

      

十进制二进制(满二进一)
100000001
200000010
300000011
400000100

 然后我们要只知道二进制中的第一位为符号位0是正数1代表是负数,正数的的原码,反码补码都是自己,而且二进制在执行过程中都是拿补码去执行的,那么负数的补码应该怎么算呢?下面我们来拿-4来做例子获取-4的二进制反码:

 首先我们要知道4的补码是什么

 4的补码 00000100
-4的源码在4的补码基础上把第一位从0换到110000100
-4的反码在源码基础上除了符号位其他取反11111011
-4的补码在反码的基础上+111111100
用电脑自带的计算机验证下结果为11111100

由此可知-4的补码是11111100,那么为什么int型128转换成byte型会是-128呢?

首先按照正常来算的话128应该是10000000由于一个字节的第一位是符号位计算机就把10000000当做负数了,具体计算出来如下:

127的原码01111111
-127的原码11111111
-127的反码10000000
-127的补码10000001
在-127的补码的基础上-1得到-128的补码10000000

所以byte的范围是-128~127之间。

                                                                                 

           

      

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值