标签: twos-complement

从Java FileInputStream读取字节时,如何区分-1和0xff?

因此,我不得不参加面试,我需要编写一个执行简单XOR加密的迷你应用程序,并遇到了这个问题.我使用FileInputReader来拉入每个字节,使用密钥执行XOR操作,并将结果推回FileOutputStream.什么让我思考.

FileInputStream返回一个32位有符号类型的int.只接收一个字节时,可以将其转换为"字节"类型.如果FileInputStream达到EOF,它也返回-1.但是,在二进制补码二进制中-1 == 0xff,那么如果读取的字节真的是0xff而不是EOF怎么办?

除了特殊情况(例如EOF)之外,0xff是一个数学上不会返回的字节吗?或者这是您可能需要考虑的情况,具体取决于您正在阅读的数据?

java fileinputstream eof twos-complement

2
推荐指数
1
解决办法
3569
查看次数

python int 的架构是特定的吗?

我们可以将变量定义为整数值,例如

x = 3
y = -2
Run Code Online (Sandbox Code Playgroud)

然后与二元运算符位进行操作&|^~。问题是我们是否总是在每个架构上得到相同的结果,还是行为架构是特定的?我们可以总是假设整数的二进制补码表示吗?

python binary integer cpu-architecture twos-complement

2
推荐指数
1
解决办法
180
查看次数

十进制 <--> 二进制补码 <--> 十六进制转换

我想知道我是否收到这样的问题:

“将十进制数转换为二进制补码,然后以十六进制给出答案”。

是下面的路径,怎么做?

十进制数:-23

23 = 00010111 = 十六进制 17 = -17

-23 = 11101001 = 十六进制 E9

那么要将其转换为十六进制,答案是 -17 还是 E9?

谢谢

hex decimal twos-complement

2
推荐指数
1
解决办法
3万
查看次数

为什么(字节)400000和(字节)-400000结果-128

在Java中,为什么(字节)400000和(字节)-400000都有结果-128?

实际上,我遵循/sf/answers/635996651/的计算方法

例如:400000 Binary:1100001101010000000 Trim to 8 digits:10000000由于最左边的数字是1,所以-1从它:01111111然后反转它:10000000结果:-128

例如:-400000二进制:-1100001101010000000修剪到8位:10000000由于最左边的数字是1,所以-1从它:01111111然后反转它:10000000结果:128

相同的方法适用于(短)40000 = -25536(短)-40000 = 25536

java byte casting twos-complement

2
推荐指数
1
解决办法
126
查看次数

如何从一个补码转换为两个补码

我很困惑如何从一个补码转换为两个补码.假设我们在一个补码中有10101101.如何将其转换为二进制补码?

谢谢

twos-complement

2
推荐指数
1
解决办法
9366
查看次数

5位数字可以表示的最大值和最小值是多少?在 2 的补码表示中

假设 2 的补码表示,可以用 5 位数字表示的最大值和最小值是多少?

我是否找到了 5 位数字的最小值和最大值,即 00000,但我不确定最大值是多少。然后转换为二进制补码?这听起来很愚蠢,但这是我唯一能想到的……

我的最后一个问题是:假设它们是使用 2 的补码格式的存储,那么在处理器中存储 –EA(base16) 和 24(base16) 之间的值所需的最小寄存器长度是多少?

我不知道如何解决这个问题。

任何帮助或解释将不胜感激:)

twos-complement data-representation

2
推荐指数
2
解决办法
3万
查看次数

按位进位应用

说我天真,但在这方面我总是很挣扎。所以我只是浏览代码,在没有 + 运算符的情况下添加两个数字并撞到了这段代码:

int Add(int x, int y)
{
    // Iterate till there is no carry  
    while (y != 0)
    {
        // carry now contains common set bits of x and y
        int carry = x & y;  

        // Sum of bits of x and y where at least one of the bits is not set
        x = x ^ y; 

        // Carry is shifted by one so that adding it to x gives the 
        // required sum
        y = …
Run Code Online (Sandbox Code Playgroud)

c math bit-manipulation bitwise-operators twos-complement

2
推荐指数
1
解决办法
1513
查看次数

最小值不能以字节保存

根据https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,Java中的一个字节是:

"字节数据类型是一个8位带符号的二进制补码整数.它的最小值为-128,最大值为127(含)."

如果我在Java中以二进制补码形式写入最大值(127),我可以将其保存为字节类型.

byte positive127 = 0b01111111;
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试对最小值-128执行相同操作,则将其解释为整数.我无法将其保存在一个字节中.

byte negative127 = 0b10000000;
Run Code Online (Sandbox Code Playgroud)

来自IDE的图片

有人可以解释为什么当文档声明字节类型应该能够保存这个值时,这是不可能的吗?

提前致谢!

java binary twos-complement

2
推荐指数
1
解决办法
38
查看次数

C - 当负字符总是被编码为二进制的 2 的补码时,负字符中的有符号位在哪里(-128)?

  • 我知道有符号整数中的最高有效位用于对符号进行编码。
  • 我还发现负整数几乎总是被编码为其二进制的 2 的补码。

我无法调和上述两个事实。

如果我们看这里的-128的例子,在编码时采取以下步骤

  1. 找出 128 的二进制等价物: 10000000
  2. 取 1 的补码: 01111111
  3. 将 1 与 1 的补码相加得到 2 的补码: 10000000

我的问题是:sign bit负整数的在哪里?换句话说,我想了解如何10000000解码为-128 而不是-0

  1. 如果使用最左边的 1 (MSB) 来编码 -128 的负号,那不是给我们留下了 7 位二进制 0000000,其十进制等效值为 0(而不是 -128)?
  2. 或者计算机是否(当然是比喻性的)——当对存储在某个内存位置的负整数执行计算时——以相反的顺序执行上面的步骤 1-3,以在它看到 1 时解码 1 字节字符的值最重要的位(而不是 0)?
  3. 或者是MSB对-128中第8位(2 ^ 7)的符号和位进行编码。

我已经看到了这个问题,但我的不同,因为我很清楚 +128 不能存储在 1 字节中,因为它的有符号二进制将转换为0100000000需要 9 位。

c signed twos-complement

2
推荐指数
1
解决办法
174
查看次数

这个大小调整代码在 C 中的优势是什么?

为通用问题标题道歉,我不知道如何正确表达它(欢迎提出建议!)

我试图了解Common Mark 解析器的一些代码并遇到了这个:

  /* Oversize the buffer by 50% to guarantee amortized linear time
   * complexity on append operations. */
  bufsize_t new_size = target_size + target_size / 2;
  new_size += 1;
  new_size = (new_size + 7) & ~7;
Run Code Online (Sandbox Code Playgroud)

因此,给定一个数字,例如 32,它将加 (32 / 2) [48]、加 1 [49]、加 7 [56],最后与 -8 [56] 相加。

这是一种常见的模式吗?特别是添加一个数字,然后与它的补码进行 AND 运算。

是否有人能够深入了解这是做什么以及存在哪些优势(如果有)?

c twos-complement commonmark cmark

2
推荐指数
1
解决办法
42
查看次数