例1:

public class test {
public static void main(String[] args) {
byte a = 127 ;
a = (byte)(a+3) ;
System.out.println(a);
}
}

输出-126,为什么呢

byte类型的取值范围是-128-127

这个输出结果是由java编码方式决定的,Java中正数用原码表示,负数用补码表示,第一位是符号位。

对于127他的编码是:

0000 0000 0000 0000 0000 0000 0111 1111

加上3也就是130。他的编码是:

0000 0000 0000 0000 0000 0000 1000 0010

使用强制转型后,a的编码就变成:

1000 0010

由于java第一位为1的为负数。负数用补码表示,所以要显示原码,要取反加1:

这样就变成 0111 1110

这样就是126加上符号。结果就是-126

例2:

public class test {
public static void main(String[] args) {
short a = 128 ;
byte b = (byte)a ;
System.out.println(b);
}
}

输出-128,为什么呢

同上:

a的编码是:

0000 0000 1000 0000

强制转型后变为1000 0000

由于java第一位为1的为负数,负数用补码表示,所以要显示原码,要取反加1:

还是1000 0000

这样就是128加上符号。结果就是-128

例3:

public class test {
public static void main(String[] args) {
byte a = (byte)(-129) ;
System.out.println(a);
}
}

输出127。为什么呢

同上:

a的补码是:

1000 0000 0000 0000 0000 0000 1000 0001

a的原码是:

0111 1111 1111 1111 1111 1111 0111 1111

强制转换。取后面8个字节,也就是

0111 1111

所以结果是127

byte类型取值范围以及溢出具体解释的更多相关文章

  1. 【C++】常见易犯错误之数值类型取值溢出与截断(3)

    0.  前言 本节是“[C++]常见易犯错误之数值类型取值溢出与截断(1)” 的补充,主要探讨浮点型的取值溢出. 1. 相关知识 (1) 浮点型数据取值范围如下: 单精度型 float 3.4 * 1 ...

  2. 【C++】常见易犯错误之数值类型取值溢出与截断(1)

    1. 数据类型数值范围溢出 如标题所述,该错误出现的原因是由于变量的值超出该数据类型取值范围而导致的错误. 例题如下: (IDE环境:C-Free,编译器为mingw5,如下图) # include ...

  3. java中为什么byte的取值范围是-128到+127

    概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数.正数补码为其本身:负数补码为其绝对值各位取反加1:例如:+21,其二进制表示形式是000101 ...

  4. 带符号的char类型取值范围为什么是-128——127

    以前经常看到带符号的char类型取值范围是-128——127,今天突然想为什么不是-127——127,-128是怎么来的? 127好理解,char类型是8位,最高位是符号位,0正1负,所以011111 ...

  5. byte的取值范围是-128~127,那么包含-128和127吗?

    本帖最后由 王德升老师 于 2019-12-27 17:56 编辑 byte的取值范围为什么是-128~127?如果面试官问你取值范围包含127吗?1. 首先我们知道Java中byte类型是1个字节占 ...

  6. 【C++】常见易犯错误之数值类型取值溢出与截断(2)

    本节内容紧接上节,解决红色字体遗留问题.本节所有例子运行环境: win10 + VS2015 + X64 + debug 在上节例子中,查看变量 c .d .d+1 的类型. //// Console ...

  7. 为什么byte的取值范围是-128到127

    一个byte由八个位组成,如00000000,其中,符号位+数值位,前7位表示数值,第8位是符号位(0为正,1为负).这样+1就是00000001,-1就是10000001.最大的正数就是0 1111 ...

  8. signed char类型取值范围计算

    在C语言程序中,给定一个类型,如何计算这个类型变量的取值范围呢?比如有一个字符型变量定义如下: signed char c: 这个字符变量c的取值范围是[-128,127],是计算出来的呢? 假设字符 ...

  9. Java连载10-数据类型取值范围&转义字符

    一.数据类型取值范围 二.八种数据类型在成员变量中的默认值 (1)成员变量,没有赋值,编译不会报错,系统会自动给赋值 byte\int\short\long默认值为0:float\double默认值为 ...

随机推荐

  1. Windows 平台下 Go 语言的安装和环境变量设置

    1. Go 语言 SDK 安装包下载和安装 最新稳定版 1.5.3 安装包 go1.5.3.windows-amd64.msi下载地址 https://golang.org/dl/,大小约 69 MB ...

  2. elasticsearch indices.recovery 流程分析(索引的_open操作也会触发recovery)——主分片recovery主要是从translog里恢复之前未写完的index,副分片recovery主要是从主分片copy segment和translog来进行恢复

    摘自:https://www.easyice.cn/archives/231 elasticsearch indices.recovery 流程分析与速度优化 目录 [隐藏] 主分片恢复流程 副本分片 ...

  3. AIX 常用命令汇总(一)

    命令 内核 如何知道自己在运行 32 位内核还是 64 位内核? 要显示内核启用的是 32 位还是 64 位,可输入以下命令: bootinfo -K 如何知道自己在运行单处理器还是多处理器内核? / ...

  4. poj 1161 Floyd+枚举

    题意是: 给出n个点,围成m个区域.从区域到另一个区域间需穿过至少一条边(若两区域相邻)——边连接着两点. 给出这么一幅图,并给出一些点,问从这些点到同一个区域的穿过边数最小值. 解题思路如下: 将区 ...

  5. king枚举帮助类

    可以方便的实现枚举 枚举 public enum DeptType { [Description("科室1")] Professional = , [Description(&qu ...

  6. css中常用的七种三栏布局技巧总结

    三栏布局,顾名思义就是两边固定,中间自适应.三栏布局在开发十分常见,那么什么是三栏布局?例如当当网首页边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应.效果如下图所示: 下面围绕的这样的 ...

  7. Git Learning Part III - working remotely (Github)

    help document of Github : https://help.github.com/ 1 upload 1.1 new update  Initialize a repository  ...

  8. css3伸缩布局中justify-content详解

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Google浏览器“无法添加来自此网站的应用、扩展程序和应用脚本”的解决办法

    原文链接:https://blog.csdn.net/Fan_Weibin/article/details/80402790 解决方法如下: 在桌面找到Google Chrome图标→右击属性→在快捷 ...

  10. TypeScript简单的代码片段

    TypeScript中,接口.接口实现.函数重载: interface IThing{ name:string; age:number; sayHello:{ (name:string):string ...