我正在为考试而学习,我想检查一下我对这个问题的答案:
假设二进制值是带符号的8位值,表示二进制补码格式,其十进制范围为-128至127。以下哪个语句为是/否?
1)11111111> 0111111
我认为这是错误的,因为第一个数字代表正负号,因此我们将负值与正值进行比较。
2)(11111111 + 11111111)>(00000001-00000010)
我对此不太确定,因为我不知道它溢出时会发生什么。我认为计算机只会丢失最后一位数字。所以我认为左侧是-128-128 = -256。然后,右侧为1-2 = -1,表示为1000001。这意味着以十进制表示的不等式变为-256> -1,这是错误的。但是同样,我对此不太确定。
3)(10000000/00000100)== 11100000
第一部分为-0/4,第二部分为非零,所以它是假的吗?
此外,仅存在示例问题,我想自己练习/探索。有什么方法可以编写C ++程序来查看这种形式的问题的预期输出?
谢谢。
答案 0 :(得分:0)
关于在C ++中进行此操作,这里有很多位操作库(仅搜索“ C ++位操作库”会产生很多结果)。举几个例子:
您可能会或可能不会发现一个带有二进制补码的内置概念。无论如何,对您自己来说,在这些库之一提供的功能之上实现该功能可能是一个有用的练习,例如,通过对它们提供的内容进行子类化或编写将现有库实现封装为数据成员的自己的类。