变量a是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF;变量b是一个64位有符号的整数,初始值用16进制表示为:0x8000000000000000;则a+b的结果用10进制表示为多少?
答案是: -1 ;
解析
1、a+b的16进制表示为
0xFFFF FFFF FFFF FFFF ;(16位F),转为二进制为64个1
2、有符号数:是针对二进制来讲得。用最高位作为符号位,0 代表 + ;1 代表 - ;所以a+b的结果是负数;
3、计算机中负数是以补码的形式保存的,将补码转换成原码的计算方法:
----(1)、对于正数,原码与补码相同
----(2)、对于负数,将补码除符号位之外,按位取反,末位加 1 ,即得原码。
4、a+b=1111…111 (64位1)
取反 : 100…000 (后面63位0)
加1 : 100…0001 (中间62位0,最后一位是1)
结果: 10进制 = -1 ;