在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?
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呢?的更多相关文章
- 关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)
先看一段推理<*一切都是在8个比特位的前提下,讨论二进制的符号位,溢出等等,才有意义*> +124:0111 1100 -124:1000 0100 +125:0111 1101 -125 ...
- Java中Date类型如何向前向后滚动时间,( 附工具类)
Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: import java.text.SimpleDateFormat; import java.util.Calendar ...
- java中求余%与取模floorMod的区别
初学java的时候接触的%这个符号 百分号? 求余? 取模? 我只知道不是百分号,好像是求余,听别人那叫求模运算符,跟求余一样,于是我便信了. 思考之后开始迷糊,然后经过多次考证得到以下结论. 首先, ...
- java中int相除取小数点后两位或限定位数
java 两个整数相除保留两位小数: http://blog.sina.com.cn/s/blog_624d755d0101cvuq.html java中,当两个整数相除时,由于小数点以后的数字会被截 ...
- java中8种数据类型和默认值所占字节数
java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...
- java中使用 正则 抓取邮箱
我们来抓取豆瓣网的邮箱吧!把这个页面的所有邮箱都抓取下来 如https://www.douban.com/group/topic/8845032/: 代码如下: package cn.zhangzon ...
- java中的小数的取整的几种函数
Math类中提供了5个与取整相关的函数,如下所示: static double ceil(double a):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储). static double ...
- java中为什么byte的取值范围是-128到+127
概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数.正数补码为其本身:负数补码为其绝对值各位取反加1:例如:+21,其二进制表示形式是000101 ...
- JAVA中的变量及取值范围
字节是二进制数据的单位.一个字节通常8位长.但是,一些老型号计算机结构使用不同的长度.为了避免混乱,在大多数国际文献中,使用词代替byte.变量: 变量的数据类型:变量名=变量值 数据类型 基本型 数 ...
随机推荐
- 创建DataTable与DataGridView进行绑定
private DataTable dt = new DataTable(); BindingSource bs = new BindingSource(); /// <summary> ...
- Myeclipse下PHP开发环境搭建及运行
外接CSDN链接 http://blog.csdn.net/yuxiangaaaaa/article/details/54948426 这是php初始设置,后面进行重新设置
- Springboot - 更优雅的方式请求发 HTTP 请求
参考:https://www.cnblogs.com/javazhiyin/p/9851775.html RestTemplate 是 Spring 提供的用于访问Rest 服务的客户端RestTem ...
- android: 根据文件uri 获取文件名
public static String getFileRealNameFromUri(Context context, Uri fileUri) { if (context == null || f ...
- Update(Stage4):scala补充知识
1.惰性加载: 在企业的大数据开发中,有时候会编写非常复杂的SQL语句,这些SQL语句可能有几百行甚至上千行.这些SQL语句,如果直接加载到JVM中,会有很大的内存开销.如何解决? 当有一些变量保存的 ...
- vector的使用-Hdu 4841
圆桌问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submis ...
- preg_replace相关问题
preg_replace preg_replace 函数执行一个正则表达式的搜索和替换. 语法: preg_replace ( mixed $pattern , mixed $replacement ...
- 下载安装charles并导入证书、使用
抓包原理 1.截获真实客户端的 HTTPS请求,伪装客户端向真实服务端发送 HTTPS 请求. 2.接受真实服务器响应,用 Charles 自己证书伪装服务端向真实客户端发送内容 3.证书导入 看博客 ...
- PAT T1016 Uniqueness of MST
dfs判断连通块的数量,prim算法建立最小生成树并判断是否唯一~ #include<bits/stdc++.h> using namespace std; ; const int inf ...
- LUA拾翠
一.函数 1.格式 optional_function_scope function function_name( argument1, argument2, argument3..., argume ...