加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用Ruby的按位运算符计算一个补码?

发布时间:2020-12-17 01:48:20 所属栏目:百科 来源:网络整理
导读:我想要的是: assert_equal 6,ones_complement(9) # 1001 = 0110assert_equal 0,ones_complement(15) # 1111 = 0000assert_equal 2,ones_complement(1) # 01 = 10 输入的大小不固定为4位或8位.而是它的二进制流. 我所看到的: v = "1001".to_i(2) = 9 有一点
我想要的是:

assert_equal 6,ones_complement(9)   # 1001 => 0110
assert_equal 0,ones_complement(15)  # 1111 => 0000
assert_equal 2,ones_complement(1)   # 01 => 10

输入的大小不固定为4位或8位.而是它的二进制流.

我所看到的:

v = "1001".to_i(2)                 => 9

有一点翻转运算符?

(~v).to_s(2)                       => "-1010"
sprintf("%b",~v)                  => "..10110"
~v                                 => -10

我认为它与一个用于存储标志的东西有关…有人可以解释这个输出吗?如何在不使用字符串操作的情况下获得一个补码,例如从sprintf输出中删除最后的n个字符以获得“0110”或将0替换为1,反之亦然

解决方法

听起来你只想翻转四位(输入的长度) – 所以你可能想要与1111进行异或.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读