首页 > 试题广场 >

存在int类型变量x,y,z,其对应值为x=0x59,y=0

[单选题]
存在int类型变量x,y,z,其对应值为x=0x59,y=0x39,z=0x6E,则x*y+z的值为()
  • ‘1001001110011
  • ‘1010000111111
  • ‘1001001110111
  • ‘1011001111111
    5 9
 x 3 9
-----------
   3 2 1
1 0 b
----------
1 3 d 1
+    6 E
-----------
0x  1 4 3 f 

发表于 2017-08-01 11:14:20 回复(5)
以下演算是基于前两个回答的,多谢!
package com.nowcoder.二进制;

public class 十六进制 {
public static void main(String[] args) {
int x = 0x59, y = 0x39, z = 0x6E;
System.out.println(x * y + z);

int ret = x * y + z;
System.out.println(Integer.valueOf(ret));
System.out.println(0b1010000111111);
System.out.println(0x143f);
}
}
/*

0x59 * 0x39 + 0x6e
演算过程:
5 9
x 3 9
3 5  => 表示进位数
------------
[3 2 1]=> 9*9=81 => 81/16=5……1(表示商为5余数为1,以下同理) => 1留下做结果,进位上5
=> 5*9=45 => 45+5=50(加上进位再做运算) => 50/16=3……2 => 2留下做结果,进位上3 => 3直接落下做头
=> 综上两步,0x59*0x9=0x321

1 1    => 表示进位数
[1 0 b]  => 9*3=27 => 27/16=1……11 => 11即b留下做结果,进位上1
=> 5*3=15 => 15+1=16(加上进位再做运算) => 16/16=1……0 => 0留下做结果,进位上1 => 1直接落下做头
=> 综上两步,0x59*0x3=0x10b
3 2 1
1 0 b
------------
1 3 d 1 =>2+b=2+11=13=d
+       6 E
-----------
0x  1 4 3 f => 1+E=1+14=15=f,最终结果是0x143f

下面转换二进制(基于8421码转换,注意:十六进制每位相当于4位二进制):
0x 1    4    3    f
1    4    3    15
0001 0100 0011 1111
综上,结果就是:0001010000111111,取出首部0即:1010000111111
*/
由于排版问题,附上截图方便查阅:

编辑于 2017-12-14 00:05:27 回复(2)
正常的做乘法计算, 只不过10进制换成16进制。比如 59 *39 中, 9*9=81, 81 / 16 得5余1,那么把5进位
5*9 = 45 + 进位5=50, 50/16=3...2 ,所以到59 * 9 这部分就是321.

编辑于 2017-08-01 18:49:12 回复(2)
发表于 2022-11-29 13:02:40 回复(0)
首先明白0x是十六进制,十六进制转十进制的方法是从右往左按位相乘0x59:9*16的0次方+5*16的一次方,y和z也是一样。 5*16+9*1=89 3*16+9*1=57 6*16+14*1=110,a到f=10到15 89*57+110=5183,然后就可以利用计算机了,非要手算的话,就一直除2
发表于 2022-03-21 23:37:15 回复(0)
可以先转换为十进制再做乘法吗?
发表于 2023-07-21 13:14:07 回复(0)
十六进制0x59->十进制5*16+9=89; 十六进制0x39->十进制3*16+9=57; 十六进制0x6E->十进制6*16+14=110; 十进制89*57+110=5183->二进制1010000111111
发表于 2022-11-22 08:42:09 回复(0)