int number = 0xFF;

字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值。

0xFF是一个整数字面值,整数字面值的缺省类型是 int。

我们知道在Java中, int 是一个4个字节(32位)的基本数据类型。

那么0xFF实际上完整的写法是0x000000FF。


4位二进制可以表示1位十六进制,那么 0x000000FF 转换为二进制的写法就是:

000 0000 0000 0000 0000 0000 1111 1111

按位取反:

~number

= ~0xFF

= ~0x000000FF

= 0xFFFFFF00【H】 = 1111 1111 1111 1111 1111 1111 0000 0000【B】;

第一位是符号位,1表示负号,因此这里要进行一个转换,从负数补码的形式转换成原码,这样才能求出它真实想表达的数值。


从补码转换成原码,先减1得到反码,然后取反得到原码。

第一步,最低位减 1:

111 1111 1111 1111 1111 1111 0000 0000【补码】 - 1 = 111 1111 1111 1111 1111 1110 1111 11111【反码】

第二步,除符号位,各位取反:

000 0000 0000 0000 0000 0001 0000 0000【原码】

得到原码后,计算它的数值部分得到:1 0000 0000【B】= 28 【Q】=  256【Q】

加上符号位,得出结果为:-256

因此,十六进制数0xFF取反之后对应的十进制数就是-256。


总结一下,这里涉及到的有三个知识点。

第一,在Java中,整数字面值的缺省类型是 int,它由 32bit 组成;

第二,按位取反~表示对一个二进制数按位取反,即将0变成1,将1变成0;

第二,在计算机系统中,有符号位的数值型数据是以补码的形式来表示和存储的。正数的补码就是其本身;负数的补码转换为原码,先对最低位减1,然后除了符号位各位取反,最终得到的就是原码。

在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?的更多相关文章

  1. 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)

    先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...

  2. Java中Date类型如何向前向后滚动时间,( 附工具类)

    Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: import java.text.SimpleDateFormat; import java.util.Calendar ...

  3. java中求余%与取模floorMod的区别

    初学java的时候接触的%这个符号 百分号? 求余? 取模? 我只知道不是百分号,好像是求余,听别人那叫求模运算符,跟求余一样,于是我便信了. 思考之后开始迷糊,然后经过多次考证得到以下结论. 首先, ...

  4. java中int相除取小数点后两位或限定位数

    java 两个整数相除保留两位小数: http://blog.sina.com.cn/s/blog_624d755d0101cvuq.html java中,当两个整数相除时,由于小数点以后的数字会被截 ...

  5. java中8种数据类型和默认值所占字节数

    java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...

  6. java中使用 正则 抓取邮箱

    我们来抓取豆瓣网的邮箱吧!把这个页面的所有邮箱都抓取下来 如https://www.douban.com/group/topic/8845032/: 代码如下: package cn.zhangzon ...

  7. java中的小数的取整的几种函数

    Math类中提供了5个与取整相关的函数,如下所示: static double ceil(double a):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储). static double ...

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

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

  9. JAVA中的变量及取值范围

    字节是二进制数据的单位.一个字节通常8位长.但是,一些老型号计算机结构使用不同的长度.为了避免混乱,在大多数国际文献中,使用词代替byte.变量: 变量的数据类型:变量名=变量值 数据类型 基本型 数 ...

随机推荐

  1. 【代码审计】VAuditDemo 命令注入漏洞

    一般PHP中可以使用下列函数来执行外部的应用程序或命令 system() exec() passthru() shell_exec() 跟踪$cmd --> 跟进$target,发现传递给tar ...

  2. keytool生成keystore

    在密钥库中生成本地数字证书:需要提供身份.加密算法.有效期等信息:keytool指令如下,产生的本地证书后缀名为:*.keystore keytool -genkeypair -keyalg RSA ...

  3. Http 状态码总结

    HTTP 状态码列表 一. 1 开头 (继续执行) 服务器收到请求,需要请求者继续执行操作 100:(continue) 客户端继续请求 101:(Switching Protocols) 切换协议, ...

  4. 【PAT甲级】1067 Sort with Swap(0, i) (25 分)

    题意: 输入一个正整数N(<=100000),接着输入N个正整数(0~N-1的排列).每次操作可以将0和另一个数的位置进行交换,输出最少操作次数使得排列为升序. AAAAAccepted cod ...

  5. Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来

    一.问题描述: Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来.原因是: 1) Tex ...

  6. [原]Greenplum failed segment的恢复方法

    当在使用greenplum过程中有不当的操作时,可能会出现segment节点宕掉的情况(比如在greenplum运行的过程中停掉其中几台segment节点的服务器),通过下面的方法可以恢复segmen ...

  7. Typescript 实战 --- (8)高级类型

    1.交叉类型   将多个类型合并成一个类型,新的类型将具有所有类型的特性,适用于对象混用   语法: 类型1 & 类型2 & 类型3 interface CatInterface { ...

  8. 笔记-AJAX

    笔记-AJAX 1.      简介 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML AJAX 是一种用于创建快速动态网页的技术 ...

  9. notepad++常用命令

    1>shift+tab减少缩进 2>tab键增加缩进 3>ctrol+d键复制多行 4>shift+alt+方向箭头,选中列 5>alt+c插入序列 6>ctrl+ ...

  10. Python学习第十二课——json&pickle&XML模块&OS模块

    json模块 import json dic={'name':'hanhan'} i=8 s='hello' l=[11,22] data=json.dumps(dic) #json.dumps() ...