Java中移位操作符问题!关于~的 public class Sample { public static void main(String[] args) { int a=4; System.out.println(~a); }}求高手解释一下,为什么输出-5,麻烦讲清楚点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (~a);是逐位取反的意思。int是4位 ,a的值为4,所以他的二进制为00000000 00000000 00000000 00000100取反是11111111 11111111 11111111 11111011 最高位为符号位,1为负 0为正,而负数的表示为他的补码,转换为十进制为 除了符号位不变,其余取反加1 也就是10000000 00000000 00000000 00000101 结果就是-5啦 二楼的最高位指的那位?顺手牵羊解释一下int i=-5;System.out.println(~i);为什么输出4 我上面可能解释的不是很详细。下面详细说下,相信以后楼主一定对这种题颇有心得了。呵呵在二进制的世界里,负数是以补码的形式存放在内存中的,而正数就是以原码的形式存放的,所以下面我只解释下补码的计算,补码=反码+1。所谓的反码就是 将负数的原码除最高位不变(也就是符号位,为1时,表示负,为0时,表示正。下面红色标识)以外的其他位都按位取反。(下面还是以-5为例子)-5原码:10000000 00000000 00000000 00000101。那么-5的反码相应就是:111111111 11111111 11111111 11111010这时求负数的补码就用反码加1了。也就是负数的最终保存形式:11111111 11111111 11111111 11111011那么针对楼主说的,int i=-5;也就是将11111111 11111111 11111111 11111011按位取反了,所以结果是:00000000 00000000 00000000 00000100。所以System.out.println(~i);输出的是4。 java键盘事件 snmp4j 获取table column name的问题! 无法获取元数据 急!!用jdom生成xml文件里的setAttribute属性值换行问题,麻烦大虾看看,百度了很多,也尝试了很多都没办法,具体正文。 如何实现左边树控制右边 SQL Server 2005 jdbc驱动 请问Java和C++ 中引用有什么区别? 关于log4j配置文件的问题?请大家多多指教!!! 关于JAVA连接ORACLE的问题,急用,一定要帮忙!!! 十万火急,急,急,急 Collections.sort()出现“使用了未经检查或不安全的操作” 求一个 钩子钩键盘的实例(JNA)
取反是11111111 11111111 11111111 11111011 最高位为符号位,1为负 0为正,而负数的表示为他的补码,转换为十进制为 除了符号位不变,其余取反加1 也就是10000000 00000000 00000000 00000101 结果就是-5啦
int i=-5;
System.out.println(~i);
为什么输出4
在二进制的世界里,负数是以补码的形式存放在内存中的,而正数就是以原码的形式存放的,所以下面我只解释下补码的计算,补码=反码+1。所谓的反码就是 将负数的原码除最高位不变(也就是符号位,为1时,表示负,为0时,表示正。下面红色标识)以外的其他位都按位取反。(下面还是以-5为例子)
-5原码:10000000 00000000 00000000 00000101。那么-5的反码相应就是:
111111111 11111111 11111111 11111010
这时求负数的补码就用反码加1了。也就是负数的最终保存形式:11111111 11111111 11111111 11111011
那么针对楼主说的,int i=-5;也就是将11111111 11111111 11111111 11111011按位取反了,所以结果是:
00000000 00000000 00000000 00000100。所以System.out.println(~i);输出的是4。