多校联合集训 G. 数字逻辑练习题 (普通计算)

网友投稿 693 2022-08-26

多校联合集训 G. 数字逻辑练习题 (普通计算)

多校联合集训 G. 数字逻辑练习题 (普通计算)

题目描述

原码、反码、补码都是一样的,都是正数本身。 对于负数:原码是符号位为 1,数值部分取绝对值的二进制。 反码是符号位为 1,其它位是原码取反。 补码是符号位为 1,其它位是原码取反,未位加 1。 输入一个 64bit 十进制整数,输出它的原码,反码,补码的 16 进制表示法

输入

有多组数据,每组数据一行,为一个 64bit 十进制整数,包含正负符号和数值,格式见样例。 输入保证有唯一原码,反码,补码对应。

输出

每组输出三个 16 进制数,分别为原码,反码,补码。

样例输入

+1-1+10086-2333333

样例输出

0x00000000000000010x00000000000000010x00000000000000010x80000000000000010xfffffffffffffffe0xffffffffffffffff0x00000000000027660x00000000000027660x00000000000027660x8000000000239a950xffffffffffdc656a0xffffffffffdc656b

思路

对于正数,它的原反补码都是一样的,直接按照格式输出即可。

对于负数,我们可以用 264 与原数进行某些运算得出原反补码,因为涉及到了大数,本来想用 ​​java​​​ 写的,不过发现可以用 ​​python​​​ 提交,于是万千 ​​C/C++​​ 中出现了我一个特例。

PS: 输入有可能会有 ​​-0​​​ 的情况,而它的原反补码并不等于 ​​+0​​ 。

AC 代码

while True: try: T = raw_input() if len(T.strip()) == 0: continue if T == '-0': print '0x8000000000000000' print '0xffffffffffffffff' print '0x0000000000000000' continue T = int(T) if T >= 0: print '%#018x' % T print '%#018x' % T print '%#018x' % T else: print '%#018x' % (0x8000000000000000 | -T) print '%#018x' % (2 ** 64 - 1 + T) print '%#018x' % (2 ** 64 - 1 + T + 1) except EOFError: break

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:HDU 2255 奔小康赚大钱 (二分图最大权匹配)
下一篇:敢为你最宠爱的编程语言赌100000000美元吗?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~