- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题看似重复,但实际上并非如此。我想知道如何将负数 (base-10) 转换为 32 位数字 (base-2)。例如base-10 中的 -9 相当于 base-2 中的 11111111111111111111111111110111。请向我解释程序。提前致谢。
最佳答案
假设您在问题中有 32 位值,以使我的文本简单。尽管如此,这确实适用于所有位数。
在 2 的补码二进制表示中,两个 32 位值的相加等同于将它们相加,就好像这些位以通常的方式表示非负数一样。只是有些位模式表示负数,实际上是那些以 1 开头的位模式,这些数字通常是我们期望来自所有 32 位数字集合的最大一半的数字。
既然如此,所有 1 的位模式,通常是最大可能的 32 位数字,
11111111111111111111111111111111
实际上代表-1。原因是,如果你要给它加 1,进位会一直走下去,用 0 替换每个 1,最后一个进位会从末尾掉下来,类似于一个有 999 的三位计数器,如果递增返回到 000。结果是
00000000000000000000000000000000
通常代表零。这是如何-1 + 1 = 0
在 2 的补码表示中工作。
现在如果你取一个 32 位数 n
,例如
00010111000010101100100011110010
然后按位求补得到~n
,即用 0 替换每个 1,用 1 替换每个 0,
11101000111101010011011100001101
然后添加这些得到n + ~n
,
00010111000010101100100011110010
11101000111101010011011100001101 +
--------------------------------
11111111111111111111111111111111
没有携带发生,你得到一个全1的位模式,即-1 = n + ~n
所以 -n = ~n + 1
.
这是关于 2 的补码表示的关键事实:-n = ~n + 1
.
现在您可以非常简单地解决您的问题。您知道如何转换正数,这使您能够取反。
什么是 -9 ?
首先像往常一样将 9 转换为二进制:1001 有很多前导零。然后对其求补,再加 1,得到 -9。这是事件的顺序。
n : 00000000000000000000000000001001
//complement
~n : 11111111111111111111111111110110
//add 1
-n : 11111111111111111111111111110111
关于bitwise-operators - 应用位移运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345932/
我在一个项目中有几行代码,我看不到...的值(value) buffer[i] = (currentByte & 0x7F) | (currentByte & 0x80); 它从文件中读取文件缓冲区,
为了调试目的,我在头文件中有以下程序代码。我的意图是在编译期间决定哪些消息应该打印到控制台端口,或者如果程序不是在 Debug模式下编译则根本不打印它们。 #define ALL 0xffffffff
这个问题看似重复,但实际上并非如此。我想知道如何将负数 (base-10) 转换为 32 位数字 (base-2)。例如base-10 中的 -9 相当于 base-2 中的 111111111111
如果只有AND和OR运算,如何进行XOR按位运算? 最佳答案 创建我自己的脚本语言-ChrisScript-您只需要以下内容: #!/bin/chrish bit XOR (bit A, bit B)
为什么按位非运算符(在大多数语言中为 ~)像这样转换以下值: -2 -> 1-1 -> 00 -> -11 -> -2 不应该-2转换为 2 , 1转换为 -1 , 等等。? 最佳答案 见 two's
如何使用按位运算符将两个整数相乘? 我找到了一个实现 here .有没有更好的方法来实现乘法? 例如:2 * 6 = 12 必须使用按位运算符执行。 注意:数字是任意的,不是 2 的幂 最佳答案 #i
我面临着一个相当奇怪的问题。我正在为不支持按位运算的体系结构开发编译器。然而,它处理带符号的 16 位整数算术,我想知道是否可以仅使用以下内容来实现按位运算: 加法 (c = a + b) 减法(c
遇到这样一道编程面试题。但对我来说,你怎么知道可以在这里使用位移位并不明显。好心人解释一下。谢谢。 数组的大小为 N,整数介于 0 和 1024 之间(允许重复)。另一个整数数组的大小为 M,对数
在 Pharo 中,我想对整数进行位掩码,在 Python 中如下所示: ((b1 & 0x3F) > 4) 我知道 & 和 | 在 Pharo 中工作,但我很确定它们不是按位的。 最佳答案 但你错了
if (!(y&1)) { c[x++]=d[--y]; } 我无法理解这个声明的作用。 y 是一个 int 值。 非 (!) 符号代表什么? 最佳答案 ! 将 0 转
我想知道类型转换在实践中是如何在类型之间进行的(在“嵌入式”C 中)。例如:如果我有一个 Signed 16-bit 数字,值为 -80d,11010000b,我想将它转换为 无符号 16 位。我
这是我的问题: 我正在 QtCreator 中编写一个程序来读取一些电池数据(电压、电流等)。每个值都以两个字节的形式传递,我必须将它们组合成一个 UINT16。有时我的程序会正确并显示正确的值(大约
我有一个简单的函数来测试两个数组是否互为逆数组。除了 tmp 变量外,它们看起来完全相同。一个有效,另一个无效。我一辈子都弄不明白为什么编译器会优化它——如果它确实是一个优化问题(我的编译器是 IAR
我正在开发我的第一个应用程序,其中包含多个用户的权限和角色。我的理解是最好的方法是使用 BitWise 格式。这是真的吗,还是有更好的选择? 这是我当前的测试代码,我得到了一个相当奇怪的效果。如果有人
在这里让我自己有点困惑。 我想测试一组位(3 位)是否包含某个位置的位。 if (B110 & B010 == B010) (B110 是要检查的数字,B010 是我想看看有没有的位) 上面的代码没有
我正在尝试将代码从 C 转换为 Lua,但遇到了问题。 如何在 Lua 中翻译按位与? 源 C 代码包含: if ((command&0x80)==0) ... 这怎么能在Lua中完成? 我正在
给定两个数字 L & R ,查找 L 和 R 之间的所有数字的按位与 约束 1<= L,R <= (2^32) . LL step = 1; while(L!=R) {
我完全期待投票,但这让我非常好奇,我希望至少有人能回答。我们的离散数学教授真的很喜欢旧语言,因为它们提供了大量的按位运算符。现在,他给了我们一个作业来确定以下 BASIC 语句的输出: PRINT (
我正在尝试实现以下部分中的功能:Per-commitment Secret Requirements . generate_from_seed(seed, I): P = seed f
A) int a[][]=new int[20][32]; a[2][3]=1; if(a[2][3]==1) { System.out.println("true");
我是一名优秀的程序员,十分优秀!