int a = 200,300,强制转换成byte会是多少?

前言

在学习原码、反码、补码后,加深一下基本数据类型强转的理解!

目录

前言

解释200:

解释300: 


先看ide运行结果: 

package com.lwk.project1;

/**
 * @ClassName: Test3
 * @CreateDate: 2023/2/12
 */
public class Test3 {
    public static void main(String[] args) {
        int a = 200;
        byte b = (byte) a;
        System.out.println("b = " + b);

        int a1 = 300;
        byte b1 = (byte) a1;
        System.out.println("b1 = " + b1);
    }
}

结果:

b = -56
b1 = 44 

解释200:

int占4个字节32个bit位

int a = 200;//二进制:0000 0000 0000 0000 0000 0000 1100 1000

byte占1个字节8个bit位,强转的话就要去掉前面24位,得到后面8位也就是:

byte b = (byte)a;// 1100 1000

那在计算机中二进制1100 1000是不是十进制-56的呢?看下面

打开电脑计算器的左上角【三】选择程序员如下图:

 可以看到结果是-56。

                         图1                                        图2                                图3

注意:图2中的2有几个选项:QWORD(8个字节)、DWORD(4个字节)、WORD(2个字节)、BYTE(1个字节),这里计算选择BYTE

那是怎么计算的呢?

大家都知道一个字节的情况下,第一位代表符号位。1表示是负数,真正的数值是后面的七位。在计算机中数字的运算和存储都以补码的形式存在的,所以就要计算出200的补码。

首先:

十进制200 原码 1100 1000  【200除2取余倒排法】

                  反码 1011 0111   【符号位保持不变,其余位取反】

                  补码 1011 1000   【在其反码的基础上+1】                      

128

64

32168421
0111000

 将第二行位1的对应的第一行的数字相加:32+16+8 = 56;因为是负数所以结果为:-56

不清楚的可以查看之前的文章: (5条消息) 十进制怎样转二进制?_觉醒的walker丶的博客-CSDN博客

解释300: 

int a = 300;//二进制:0000 0000 0000 0000 0000 0001 0010 1100

byte占1个字节8个bit位,强转的话就要去掉前面24位,得到后面8位也就是:

byte b = (byte)a;// 0010 1100

因为第一位是0表示是正数,所以正数的反码和补码是自己本身。 

原码 0010 1100 

反码 0010 1100  

补码 0010 1100             

128

64

32168421
0101100

 将第二行位1的对应的第一行的数字相加:32+8+4 = 44;因为是正数所以结果为:44

最后 

今天的分享就到这里了,希望可以帮助到你!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'零'Bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值