标签: twos-complement

整数是如何存储在内存中的?

这很可能是任何人都会问的最愚蠢的问题,但不管我希望我能找到一个明确的答案.

我的问题是 - 整数存储在计算机内存中怎么样?

在c#中,整数的大小为32位.MSDN说我们可以在整数变量中存储-2,147,483,648到2,147,483,647的数字.

根据我的理解,一个位只能存储2个值,即0和1.如果我只能存储0或1,我怎么能在一个位内存储2到9的数字?

更确切地说,我说这个代码int x = 5; 这将如何在内存中表示,或者换句话说如何将5转换为0和1,它背后的惯例是什么?

c# binary twos-complement

11
推荐指数
2
解决办法
5951
查看次数

将2个字节转换为数字

我有一个控件,里面有一个字节数组.

偶尔会有两个字节告诉我有关数组中未来项目数量的一些信息.

举个例子,我可以:

...
...
Item [4] = 7
Item [5] = 0
...
...

这个值显然是7.

但是这个怎么样?

...
...
Item [4] = 0
Item [5] = 7
...
...

关于什么等于(作为普通int)的任何想法?

我去二进制,并认为它可能是11100000000等于1792.但我不知道它是否真的有效(即它是否使用整个8项的字节).

有没有办法通过测试来了解这一点?

注意:我使用的是C#3.0和visual studio 2008

c# binary byte bytearray twos-complement

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

二进制补码转换

我需要将二进制补码格式的字节转换为正整数字节.范围-128到127映射到0到25​​5.

Examples: -128 (10000000) -> 0 , 127 (01111111) -> 255, etc.
Run Code Online (Sandbox Code Playgroud)

编辑为了消除混淆,输入字节(当然)是0到255范围内的无符号整数.但它表示使用二进制补码格式在-128到127范围内的有符号整数.例如,输入字节值128(二进制10000000)实际上表示-128.

EXTRA EDIT Alrighty,假设我们有以下字节流0,255,254,1,127.在二进制补码格式中,它表示0,-1,-2,1,127.这需要钳位到0到25​​5范围.有关更多信息,请查看这篇难以找到的文章:两个补充

c# twos-complement

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

按位运算和转换

我很难理解这段代码的工作方式和原因.我在这个任务中的合作伙伴完成了这一部分,我无法得到他,以了解它的工作原理和原因.我已经尝试了一些不同的东西来理解它,但任何帮助将非常感激.此代码使用2的补码和32位表示.

/* 
 * fitsBits - return 1 if x can be represented as an 
 *  n-bit, two's complement integer.
 *   1 <= n <= 32
 *   Examples: fitsBits(5,3) = 0, fitsBits(-4,3) = 1
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 15
 *   Rating: 2
 */
int fitsBits(int x, int n) {
    int r, c;
    c = 33 + ~n;
    r = !(((x << c)>>c)^x);
    return r;
}
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation bit-shift bitwise-operators twos-complement

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

-128和128 in 2的补码

在2的补码中,0-127表示为00000000到01111111.在负数的情况下,我们反转无符号表示中的所有位并加1以得到2的补码.

(参考:http://en.wikipedia.org/wiki/Signed_number_representations#Two.27s_complement)

因此,2的补码中的-1将是:


 unsigned 1 =      00000001

 invert all bits = 11111110

 add 1 =           11111111

但对于-128,如果我们遵循相同的步骤:


 unsigned 128 =    10000000

 invert all bits=  01111111

 add 1=            10000000

所以-128和128在2的补码表示法中具有相同的表示形式?为什么8位的2的补码范围不是-127到128?简而言之,为什么-128优先于使用相同位数表示无符号128?

binary twos-complement

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

什么是golang中的^ 0?

我在代码库中看到^ 0.

例:

type stat struct {
  ...
  min int64
  ...
}

newStat := stat{min: ^0}
Run Code Online (Sandbox Code Playgroud)

^ 0是什么意思?

go bitwise-operators twos-complement

10
推荐指数
1
解决办法
6471
查看次数

C ++ 20的分支需要二进制补码

C ++ 20将指定带符号整数类型必须使用二进制补码。鉴于(实际上?)每个实现当前都使用二进制补码,这似乎不是一个很大的变化。

但是我想知道这种改变是否会将某些“未定义的行为”转变为“实现定义”甚至“定义”。

考虑绝对值函数std::abs(int)及其一些重载。C ++标准通过引用C标准来包括此功能,该标准表示如果无法表示结果,则行为未定义。

用二进制补码时,没有与之相对应的正数INT_MIN

abs(INT_MIN) == -INT_MIN == undefined behavior
Run Code Online (Sandbox Code Playgroud)

在符号幅度表示中,有:

-INT_MIN == INT_MAX
Run Code Online (Sandbox Code Playgroud)

因此,abs()留下一些未定义的行为似乎是合理的。

一旦需要二进制补码,abs(INT_MIN)就可以完全指定行为,或者至少定义实现,这似乎是有意义的,而没有任何向后兼容的问题。但我看不到有任何建议的改变。

我看到的唯一缺点是C ++标准将需要abs()明确指定,而不是引用C标准的abs()。(据我所知,C并不要求补码。)

这是否只是委员会的优先事项?还是有理由不利用两国补编任务规定所提供的简化和确定性?

c++ undefined-behavior twos-complement c++20

10
推荐指数
1
解决办法
267
查看次数

用2'补码技术代表负数?

我使用2'补码来表示二进制形式的负数

案例1:数字-5

根据2'补充技术:

将5转换为二进制形式:

00000101然后翻转位

11111010,然后加1

00000001
Run Code Online (Sandbox Code Playgroud)

=>结果: 11111011

为了确保这是正确的,我重新计算到十进制:

-128 + 64 + 32 + 16 + 8 + 2 + 1 = -5
Run Code Online (Sandbox Code Playgroud)

案例2:数字-240

采取相同的步骤:

11110000

00001111

00000001

00010000 => recalculate this I got 16, not -240
Run Code Online (Sandbox Code Playgroud)

我误会了什么?

twos-complement

9
推荐指数
1
解决办法
4万
查看次数

添加两个有符号或无符号整数

自从我上次在位和字节级别进行编程以来,已经很长时间了,并且想要确认那些日子我似乎记得的东西:

假设我有两个相等长度的整数(1,2,4,8个字节;无所谓),我将它们加起来:如果它们是有符号或无符号的,则总和的逐位结果是否不同.换句话说:无论它们是有符号整数还是无符号整数,这些位最终都是相同的吗?

我的直觉和脆弱的记忆告诉我他们会,但我只想确认一下.谢谢.

c c++ integer twos-complement

9
推荐指数
1
解决办法
1633
查看次数

使用-1作为unsigned(size_t)类型的标志值

我使用-1作为返回类型为size_t(无符号类型)的函数的标志值.

我一开始并没有注意到它,特别是因为它没有导致我的代码中的任何错误(我用x == -1,而不是x <0来检查它).

是否有任何微妙的原因我不应该留下它?什么时候这可能出乎意料?这是常用的吗?

ptrdiff_t不太常见,输入时间较长,而且无论如何它都不是合适的类型,因为函数会将索引返回到数组中.

c c++ d twos-complement

9
推荐指数
2
解决办法
1494
查看次数