首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Scala扩展二进制文件?

如何使用Scala扩展二进制文件?
EN

Stack Overflow用户
提问于 2019-03-04 23:21:40
回答 1查看 170关注 0票数 -2

我正在尝试完成以下练习:

我已经在下面尝试过了,但是我的代码没有按照预期运行。

代码语言:javascript
复制
def extend(p: Long): Long = {

  var e =  p.toBinaryString

  if ( e.count(_== '1') % 2 == 0) {
    e="0"+e
  }else {
    e="1"+e
  }

  e.toLong
} 

我在这里做错了什么?我不明白我应该如何改变二进制右十六进制。

代码语言:javascript
复制
@Test def testExtend() {
  assertEquals("extend(0x0000000000000000L)", 0x0000000000000000L, extend(0x0000000000000000L))
  assertEquals("extend(0x0000000000000001L)", 0x8000000000000001L, extend(0x0000000000000001L))
  assertEquals("extend(0x0000000000000011L)", 0x0000000000000011L, extend(0x0000000000000011L))
  assertEquals("extend(0x8000000000000000L)", 0x0000000000000000L, extend(0x8000000000000000L))
  assertEquals("extend(0x8000000000F00000L)", 0x0000000000F00000L, extend(0x8000000000F00000L))
  assertEquals("extend(0x0000001000300000L)", 0x8000001000300000L, extend(0x0000001000300000L))
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 04:13:46

第一个问题是,.toLong假设要转换的是十进制值的String表示。因此,假设"10"表示十(十进制),而不是两(二进制)。

下一个问题是Long的长度是固定的。你不能再多加一点了。你必须翻转现有的比特。

代码语言:javascript
复制
def extend(p: Long): Long =
  if (p.toBinaryString.count(_ == '1') % 2 == 0) p
  else p ^ Long.MinValue

测试:

代码语言:javascript
复制
0x0000000000000000L == extend(0x0000000000000000L)  //res0: Boolean = true
0x8000000000000001L == extend(0x0000000000000001L)  //res1: Boolean = true
0x0000000000000011L == extend(0x0000000000000011L)  //res2: Boolean = true
0x0000000000000000L == extend(0x8000000000000000L)  //res3: Boolean = true
0x0000000000F00000L == extend(0x8000000000F00000L)  //res4: Boolean = true
0x8000001000300000L == extend(0x0000001000300000L)  //res5: Boolean = true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54986251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档