曾小浪的电脑蓝屏了并且出现了错误代码c000007b,他想要知道是哪里出现了错误,却又不了解这串字符的意思。于是他便请教了机智的小马哥。小马哥告诉他这是错误发生的逻辑地址,以十六进制表示。其中a代表10,b代表11,c代表12,d代表13,e代表14,f代表15。在二进制下表示为11000000000000000000000001111011。
这是32位机惯用的内存编码。但是光知道逻辑地址并不能清楚正真的错误发生在了哪里,因为错误是发生在逻辑地址对应的物理地址中。要转换成物理地址并不困难,只需要将逻辑块号替换为物理块号即可,块号就是地址的前m位,那么现在已知了块号的二进制长度m和物理块号值k,有了这些,简单计算一下,物理地址就能算出来了。
第一行一个整数T,表示T组数据。(0<T<50)
每组数据包括三行,分别为
字符串a(八位的十六进制字符串代表逻辑地址)
块号位数m(0<=m<32)
物理块号值k(0<=k<2^m-1)。
对于每组输入,请输出一行表示十六进制下当前逻辑地址对应的物理地址(行末无多余空格)。
c 0 0 0 0 0 7 b | 逻辑地址的十六进制 1100 0000 0000 0000 0000 0000 0111 1011 | 逻辑地址的二进制 0000 0010 10 | 长度为10的值为10的二进制 0000 0010 1000 0000 0000 0000 0111 1011 | 覆盖后得出的物理地址 0 2 8 0 0 0 7 b | 转化为十六进制 ps:只覆盖前m位