当前位置:网站首页>整型类型128转byte为什么是-128
整型类型128转byte为什么是-128
2022-07-19 05:23:00 【l'amourХэ рутилин】
public static void main(String[] args) {
short a = 128;
byte b = (byte) a;
System.out.println(b);
}
相信很多人都知道上面代码运行的结果是-128 ,但这又是为什么了
大家都知道short的长度为16个bit位 所以在int中128的二进制表示为 0000 0000 1000 0000
java在强转时 如果是长位转短位保留与短位数相同的长位末尾的二进制值,所以b的二进制表示为1000 0000但1000 0000转化为十进制为128,为什么在byte中会表示成-128呢?
学习过计算机的同学都知道在计算机中数字二进制 最高位为符号位,1代表负值,0代表正值。并且是以补码(正数的补码和原码相同,负数的补码是在原码的基础上各位取反然后加 1。)的形式存储的。但1000 0000的原码还是1000 0000。
下面从两个角度理解-128的补码为什么是1000 0000.
从补码的意义上去理解
因为:256-128=256+(-128)的补码 --(机器中只有加法)。减法会变成补码的加法。
而 256-128=128
所以 256+(-128)的补码=128
所以 (-128)的补码=256-128
(-128)的补码 =128 (1000 0000)
0000 0000 0000 0000 0
1000 0001 1111 1111 -1
1000 0010 1111 1110 -2
1000 0011 1111 1101 -3
... .. 补码不断-1...
1111 1111 1000 0001 -127
无法表达 1000 0000 -128
所以规定8位二进制中1000 0000表示位-128 因此当其他整型128转化为byte时为-128
边栏推荐
猜你喜欢
Introduction to the structure of gocore-v2 framework scaffold generation project
Introduction to 3dslicer default extension module program
Day006选择结构(if语句练习)
关于vscode使用 !+tab 失效问题的解决办法
小白程序员第一天
小白程序员第七天
3Dslicer默认扩展模块程序介绍
总结2-深度学习网络搭建学习
主路径覆盖与基路径覆盖
Gocore-v2 framework -gocore Introduction to yaml configuration file
随机推荐
Verilog语法基础HDL Bits训练 02
(二)Swagger的实际应用详例
Dark horse programmer thread pool
div拖拽效果
Qt 日志文件系统
Verilog语法基础HDL Bits训练 01
FPGA之蜂鸣器播放音乐《花海》
Model in pytorch train(),model. Eval () and torch no_ The difference between grad()
探索一下自增自减运算符的使用方式
选择结构 if分支结构
Conception d'un compteur de fréquence simple pour la FPGA
文档流定义,盒子模型相关知识
优化器:torch.optim
主路径覆盖与基路径覆盖
FPGA按键消抖—两种按键消抖形式的对比
我理解的MVC
3DSlicer简介与安装教程
High collapse and solution
lambda用法
转:Pytorch模型小例子