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进制对 ...
随机推荐
- plsql dev引起的数据库被黑勒索比特币实现原理分析和解决方案
转自http://www.xifenfei.com/2016/11/plsql-dev-hacker-bitcoin.html afterconnect.sql是plsql dev登录后自动执行脚本, ...
- Android Studio 连接提交Git
转载:http://www.jianshu.com/p/061d24a6b798 之前一直在使用SVN的时候,就听说Git是个很强大的版本控制工具,最近比较闲,又赶上在痛苦的学习着使用Android ...
- Leetcode 132. Palindrome Partitioning II
求次数的问题一般用DP class Solution(object): def minCut(self, s): """ :type s: str :rtype: int ...
- komodo,mysql workBeach
跨平台的好软件,只不过自己的眼界太狭隘 Ubuntu下PPA安装,打开终端输入命令: sudo add-apt-repository ppa:mystic-mirage/komodo-edit ...
- struts2 CVE-2012-0392 S2-008 Strict DMI does not work correctly allows remote command execution and arbitrary file overwrite
catalog . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch Fix 1 ...
- 有关Java的日期处理的一些杂记
在企业应用开发中,经常会遇到日期的相关处理,说实话JDK自带的日期方法很难用.就我个人而言我一般都会采用joda-time来替代JDK自身的日期. 这篇文章是杂记,所以写的比较零散,希望大家不要见怪. ...
- HDU 1231 最大连续子序列(水题)
题目链接: 传送门 最大连续子序列 Time Limit: 1000MS Memory Limit: 32768 K Description 给定K个整数的序列{ N1, N2, ..., N ...
- Wavefront OBJ 转换成OpenGL ES使用的C/C++文件
项目需要展示3D max模型,通过调研
- ionic 发送请求返回一直都是404
在web端调试一直都没有问题,生成app之后发现所有的请求返回的都是404, 断掉wifi和4G之后发送的也是404 原因是未引入插件 解决方法是在根目录下执行一下命令 cordova plugin ...
- 从Paxos到ZooKeeper-一、分布式架构
本系列为本人读<从Paxos到ZooKeeper>一书的一些读书笔记,仅供学习使用,谢谢. 一.从集中式到分布式 1.1 分布式的定义: 分布式系统是一个硬件或软件组件分布在不同的网络计算 ...