因此,我不得不参加面试,我需要编写一个执行简单XOR加密的迷你应用程序,并遇到了这个问题.我使用FileInputReader来拉入每个字节,使用密钥执行XOR操作,并将结果推回FileOutputStream.什么让我思考.
FileInputStream返回一个32位有符号类型的int.只接收一个字节时,可以将其转换为"字节"类型.如果FileInputStream达到EOF,它也返回-1.但是,在二进制补码二进制中-1 == 0xff,那么如果读取的字节真的是0xff而不是EOF怎么办?
除了特殊情况(例如EOF)之外,0xff是一个数学上不会返回的字节吗?或者这是您可能需要考虑的情况,具体取决于您正在阅读的数据?
我们可以将变量定义为整数值,例如
x = 3
y = -2
Run Code Online (Sandbox Code Playgroud)
然后与二元运算符位进行操作&,|,^和~。问题是我们是否总是在每个架构上得到相同的结果,还是行为架构是特定的?我们可以总是假设整数的二进制补码表示吗?
我想知道我是否收到这样的问题:
“将十进制数转换为二进制补码,然后以十六进制给出答案”。
是下面的路径,怎么做?
十进制数:-23
23 = 00010111 = 十六进制 17 = -17
-23 = 11101001 = 十六进制 E9
那么要将其转换为十六进制,答案是 -17 还是 E9?
谢谢
在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
我很困惑如何从一个补码转换为两个补码.假设我们在一个补码中有10101101.如何将其转换为二进制补码?
谢谢
假设 2 的补码表示,可以用 5 位数字表示的最大值和最小值是多少?
我是否找到了 5 位数字的最小值和最大值,即 00000,但我不确定最大值是多少。然后转换为二进制补码?这听起来很愚蠢,但这是我唯一能想到的……
我的最后一个问题是:假设它们是使用 2 的补码格式的存储,那么在处理器中存储 –EA(base16) 和 24(base16) 之间的值所需的最小寄存器长度是多少?
我不知道如何解决这个问题。
任何帮助或解释将不胜感激:)
说我天真,但在这方面我总是很挣扎。所以我只是浏览代码,在没有 + 运算符的情况下添加两个数字并撞到了这段代码:
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) 根据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)
有人可以解释为什么当文档声明字节类型应该能够保存这个值时,这是不可能的吗?
提前致谢!
我无法调和上述两个事实。
如果我们看这里的-128的例子,在编码时采取以下步骤
100000000111111110000000我的问题是:sign bit负整数的在哪里?换句话说,我想了解如何10000000解码为-128 而不是-0
我已经看到了这个问题,但我的不同,因为我很清楚 +128 不能存储在 1 字节中,因为它的有符号二进制将转换为0100000000需要 9 位。
为通用问题标题道歉,我不知道如何正确表达它(欢迎提出建议!)
我试图了解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 运算。
是否有人能够深入了解这是做什么以及存在哪些优势(如果有)?