强制类型转换细节解析

基础类型范围:

byte b = 44; //byte占1个字节,取值范围为-128~127(-2的7次方~2的7次方-1)
char c = ‘b‘; //当转换为数字时,对应为字符的ASCII码表的十进制数
short s = 1024; //short占2个字节,-2的15次方~2的15次方-1(-32768~32767)
int i = 40000; //int占4个字节,-2的31次方~2的31次方-1(-2147483648~2147483647)
long l = 12463l; //long占8个字节,-2的63次方~2的63次方-1(-9223372036854774808~9223372036854774807)
float f = 35.67f; //float和double都属于浮点型,double的精度比float更精确

double d = 3.1234d;

//-133相反数的源码: 1000 0101
//反码 0111 1010
//+1 0111 1011
//123
//第一位为0,表示为正数

d = -133.89d;  //不够取模,负数,执行结果:b1 = 123

//正数在计算机中表示为原码

// 原码: 1000 0000
// 第一位为1,表示负数

d = 128.89d;  //不够取模,正数,执行结果:b1 = -128

d = -260.33d;  //够取模(256),执行结果:b1 = -4

d = 126.44d;  //不够取模,在[-128~127]范围内,执行结果:b1 = 126

byte b1 = (byte)d;
System.out.println("b1 = "+b1);

double类型向byte类型转换的规则如下:

 1 //d截断小数部分,整数部分与byte的区间范围256取模:
 2         // 1.1够取模则取模值
 3         // 1.2不够取模:
 4         //    1.2.1在[-128~127]则取对应的值
 5         //    1.2.2不在[-128~127]
 6         //        1.2.2.1为负数
 7                     //负数在计算机里面显示为补码形式,补码的转换为:
 8                     //1.获取负数对应正数的原码(8位二进制)
 9                     //2.把1的结果按位取反
10                     //3.把2的结果加1
11                     //4.3中的第一位为0则为正数,为1则为负数
12         //        1.2.2.2为正数
13                     //正数在计算机中表示为原码
14                     // 原码: 1000 0000
15                     // 第一位为0则为正数,为1则为负数

//-33700相反数的源码: 1000 0011 1010 0100
//反码 0111 1100 0101 1011
//+1 0111 1100 0101 1100
//31836
//第一位为0,表示为正数

//short占2个字节,-2的15次方~2的15次方-1(-32768~32767),取模65536
d = -33700.66d;  //执行结果:s1: 31836

short s1 = (short)d;
System.out.println("s1: "+s1);

float f = 35.67f;
double d1 = f; //目标类型范围比源类型围大,自动转换
float f1 = (float)d1; //目标类型范围比源类型围小,进行强制转换

基本类型进行运算时,范围小的类型会自动提升到范围大的类型

原文地址:https://www.cnblogs.com/celine/p/8228443.html

时间: 2024-10-07 10:31:13

强制类型转换细节解析的相关文章

C++解析(25):关于动态内存分配、虚函数和继承中强制类型转换的疑问

0.目录 1.动态内存分配 1.1 new和malloc的区别 1.2 delete和free的区别 2.虚函数 2.1 构造函数与析构函数是否可以成为虚函数? 2.2 构造函数与析构函数是否可以发生多态? 3.继承中的强制类型转换 4.小结 1.动态内存分配 1.1 new和malloc的区别 new关键字与malloc函数的区别: new关键字是C++的一部分 malloc是由C库提供的函数 new以具体类型为单位进行内存分配 malloc以字节为单位进行内存分配 new在申请内存空间时可进

Python 强制类型转换

学习过程中遇到了强转问题,这里整理一下. 前言 本篇主要介绍Python的强制类型转换. 软件环境 系统 UbuntuKylin 14.04 软件 Python 2.7.3 IPython 4.0.0 Python数据类型的显式转换 数据类型的显示转换,也称为数据类型的强制类型转换,是通过Python的内建函数来实现的类型转换. 显式转换的多种类型 int(x [,base]) ? 将x转换为一个十进制的整数 long(x [,base]) ? 将x转换为一个十进制的长整数 float(x) ?

js类型转换-字符串转整型、浮点型方法、强制类型转换等

1. 转换函数: js 提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法, 这两个函数才能正确运行:对其他类型返回的都是NaN(Not a Number).这两个转换函数的结果都是将String数据类型转化为Number. 在 判断字符串是否是数字值前,parseInt()和parseFloat()都会仔细分析该字符串.parseInt()方法首先查看位置0处的 字符,判断它是否是个有效数字:如果不是,

int类型和byte类型的强制类型转换

今天在读<Java网络编程>这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方.这个地方有点细节,不过就应该把这种细节把握住. 情况是这样的,讲到InputStream的抽象方法read时,说到read返回一个int型,但实际是一个byte型的数据.这点从API也能考证.如图: 那么问题来了,int占4个字节,byte占1个字节,我们循环读取的时候将int型数组强制类型转换成byte时,会发生什么情况呢?代码如下: 1个字节占8位,既然实际返回的是byte

《你不知道的JavaScript》整理(六)——强制类型转换

JavaScript中通常分为两种类型转换,"隐式强制类型转换"(implicit coercion)和"显式强制类型转换"(explicit coercion). 下面所有代码的源码可以在此处查看. 一.强制转换为字符串(ToString) 1)ToString 基本类型值的字符串化规则为:null转换为"null",undefined转换为"undefined",true转换为"true".数字的字符串

JS 数据类型转换-转换函数、强制类型转换、利用js变量弱类型转换

1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型返回的都是NaN(Not a Number). 在判断字符串是否是数字值前,parseInt()和parseFloat()都会仔细分析该字符串.parseInt()方法首先查看位置0处的 字符,判断它是否是个有效数字:如果不是,该方法将返回NaN,不再继续执行其他操作.但如果该字符是有效数字,该方法

详细理解javascript中的强制类型转换

将值从一种类型转换为另一种类型通常称为类型转换,这是显式的情况:隐式的情况称为强制类型转换,JavaScript 中的强制类型转换总是返回标量基本类型值,如字符串.数字和布尔值. 如何理解: 类型转换发生在静态类型语言的编译阶段,而强制类型转换则发生在动态类型语言的运行时? 1.如果是静态语言,比如c等,所有的类型转换应该都是在编译阶段处理的吧? 2.如果是动态语言,如js等, 编译阶段会处理类型转换吗? 一.ToString 它负责处理非字符串到字符串的强制类型转换 数字的字符串化遵循通用规则

C++学习之路(六):关于C++提供的强制类型转换

C语言中提供了旧式的强制类型转换方法.比如: int a  =1; char *p = (char *)&a; 上述将a的地址单元强制转换为char类型的指针.这里暂且不说上述转换结果是否合理,但上述这样的强制类型转换,如果转换过程出现问题,对于问题的追踪与排查也比较困难. 对于C++而言,提供了较为安全的强制类型转换方法,下面进行简单介绍. 一.static_cast 对于任何具有明确定义的类型转换,只要不包含底层const,都可以用static_cast. 主要可以有以下几种转换: (1)用

__x__(53)0918第七天__ JavaScript 强制类型转换

其他进制的数字 二进制    以 0b 开头的 Number 八进制    以 0 开头的 Number 十六进制    以 0x 开头的 Number 注意:无论是多少进制的数字,输出都是十进制 强制类型转换 主要指的是将 变量类型 转换为String,Number,Boolean类型. 1. 转换为字符串 String 通过调用 String.toString() 方法 : Null .Undefined 没有 .toString() 方法,意味着不能用此方法转换 var a = 123;