Java中符号位扩展
第一个例子:
byte b=-100;
b在内存中是以补码的形式存贮的:
1001 1100
如果执行char c=(char)b;
如3楼企鹅先生所说:b要先变为int,这时增加的位全要用b的符号位填充(这就是符号扩展),变为:
1111 1111 1111 1111 1111 1111 1001 1100
下步是强制类型转换,只保留了最低的两个字节:1111 1111 1001 1100。
如果执行char c=(char)(b&0xff),同样b要转为int ,同时符号位扩展:
1111 1111 1111 1111 1111 1111 1001 1100
再与0xff想与,
1111 1111 1111 1111 1111 1111 1001 1100
&0000 0000 0000 0000 0000 0000 1111 1111
-----------------------------------------
0000 0000 0000 0000 0000 0000 1001 1100
再强转为char,得: 0000 0000 1001 1100。这是一个正数。
第二个例子:
int x = 0xf8;
byte d = (byte)0xf8; System.out.println(x);
System.out.println(d);
打印结果为:
248
-8
这是因为0xf8是16进制数,其对应的十进制数为248,248并未超出int类型的取值范围,故而打印结果为248.
而byte类型的取值范围为-128 -- 127,所以当把0xf8赋给d时,需要进行强转。
/**
*
* byte d = (byte)0xf8;
*
* 原码:0000 0000 0000 0000 0000 0000 1111 1000
* 强转:1111 1000
* 反码:1000 0111
* 补码:1000 1000
*
*
*/
而System.out.println()在打印的时候发现被打印的数为byte则会自动将其转换为int,所以结果为-8。
Java中符号位扩展的更多相关文章
- 浅谈Java中的补零扩展和补符号位扩展
今天,魏屌出了一道题,题目如下: 定义一个大头序的byte[]a={-1,-2,-3,-4},转换成short[]b.问b[0]和b[1]分别是多少? 乍一看,这题不难,无非就是移位操作,再进行组合. ...
- Java中的位掩码BitMask
目录 JDK源码的使用 日常工作中的使用 JDK源码的使用 最近在JDK源码中闲逛,无意中看到了java.lang.reflect.Modifier这个类,这个类很简单,都是些常量定义和判断方法,于是 ...
- Java 移位运算、符号位扩展
类型取值范围 short 是1字节,即8位.而且 Java 中只有有符号数,所以最大值 0111,1111=2^7-1. 同时计算机中以补码形式存负数,所以可以多表示一个数,则最小值 1000,000 ...
- C++ 中注意,零扩展和符号位扩展
版权声明:本文为博主原创文章,未经博主允许不得转载. 首先,介绍一下两种扩展的定义 转 http://blog.csdn.net/jaylong35/article/details/6160736 符 ...
- verilog中符号位的扩展问题
以下内容转自 艾米电子 - 使用有符号数,Verilog(http://www.cnblogs.com/yuphone/archive/2010/12/12/1903647.html) Verilog ...
- java中符号类型和无符号类型的问题分析
一 参考博文 java中无符号类型的解决方案 二 java中的无符号数和有符号数 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型. 使用二进制中的最高位表示正负 计算机中 ...
- Java中的位运算符、移位运算
一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&) :两位全为1,结果为1,否则为0: (2)按位或 (|) :两位有一个为1,结果为1,否则为0: (3) ...
- C语言位域解析&符号位扩展规则
从一个例子说起: int main(void){ union{ int i; struct{ ; ; ; }bits; }num; printf("Input an integer for ...
- Java中的位运算及简单的算法应用介绍
众所周知,计算机底层是二进制.而java作为一门计算机编程语言,也对二进制的位运算提供了完整的支持. 在java中,int是32位的,也就是说可以用来实现32位的位运算.方便起见,我们一般用16进制对 ...
随机推荐
- 精通Web Analytics 2.0 (1) 引言
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 前言 我对这本书抱有一个简单的愿望,也许是崇高的目标:改变世界对线上事情作决策的方式. 长久以来,我们在线上的举动已经被准确的归 ...
- Leetcode 416. Partition Equal Subset Sum
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- 深入了解asp.net框架。生命周期以及事件处理机制
刚接触asp.net框架觉得很好奇.他的快速开发是怎么实现的.控件的状态又是怎么保持的.我们都知道http是无状态的.而且网上很多人都说使用asp.net框架使用服务器框架是非常慢的. 带着这些疑问我 ...
- Android成长日记-ViewPager的使用
ViewPager在安卓应用中主要用于作为程序的引导页面,欢迎页面,以及其他的动画效果,下面将给你讲述ViewPager的使用 在Android3.0以上的Api中,提供了ViewPager的接口,所 ...
- Linux Hackers/Suspicious Account Detection
catalog . Linux黑客帐号攻击向量 . Linux可疑帐号检测模型 1. Linux黑客帐号攻击向量 0x1: 将黑客帐号添加到"root"组 . useradd ha ...
- Linux Overflow Vulnerability General Hardened Defense Technology、Grsecurity/PaX
Catalog . Linux attack vector . Grsecurity/PaX . Hardened toolchain . Default addition of the Stack ...
- 基于UDP协议的程序设计
使用UdpClient类进行编程 UdpClient类的使用方法 第一阶段 创建UdpClient实例 UdpClient udpClient = new UdpClient(); IPAddress ...
- POJMatrix(二维树状数组)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22058 Accepted: 8219 Descripti ...
- 深入JVM-java虚拟机的基本结构
本文将介绍Java虚拟机的基本结构,各组成部分的作用,以及相互之间是如何协调的.而要了解这些,首先必须了解Java堆.Java栈.永久区和元数据区的基本概念. 一.Java虚拟机的架构 1.1 类加载 ...
- Yocto开发笔记之《Tip-应用程序无法在目标机运行》(QQ交流群:519230208)
官方app编译环境编译的应用程序可以在开发板自带的系统中运行,自己编译并烧写了系统,却提示: root@imx6ulevk:/root# ./VTTerminal -sh: ./VTTerminal: ...