2s补码是一种存储负数的方法吗?
Is 2s complement a way to store negative number?
看了很多文章和SO答案才明白2s complement
。他们帮了我很多。不过,我心中对2s complement
.
的疑惑很少
1) 2s complement
是一种存储负数的方法,以便于操作或者也有一些其他应用吗?
2) 2s complement
是电脑看到负数时自动取?
3) 取 2s complement
是 -- 编译器的工作还是由处理器完成还是什么?
4) 当2s complement
是在--编译时,运行时还是在给变量赋值时?
我看的文章是(应该推荐更好理解2s complement
):
What is “2's Complement”?
Why is two's complement used to represent negative numbers?
Is 2s complement a way to store negative numbers in order to make operation easy?
是的,这是一种存储有符号数的方法(负数和正数,不仅仅是负数)
2s complement is taken automatically when computer see a negative number?
再次否定 -> 签名。取决于架构。可以选择 1s、2s 或其他表示形式。
Taking 2s complement is -- compiler's job or done by processor or what?
编译器必须理解系统,处理器可能理解也可能不理解 2s 补码系统。
When 2s complement is taken at -- compile time, run time or at the time of assiging a value to a variable?
2s的补码可能在所有阶段都计算出来(编译,运行)
1) 是的。
2) 计算机不能"see"一个负数。它可以看到一大块二进制数据。您的应用程序拥有说 "this chunk of binary data is an integer stored in 2's compl" 的智能。但是,世界上几乎每个 CPU 都支持 2 的补码算法。
3) 编译器看到int32_t x = 0;
这样的源代码,然后意识到这个变量是以二进制补码格式存储的。如果您随后添加 x = x - 1
之类的代码,编译器会在生成您的程序时选择使用支持 2 的补码的处理器指令。处理器只做程序告诉它做的事情。它没有智能。
4) 如上所述,这是一个编译时决定。 (不太确定 "complement taken" 是什么意思...)
看了很多文章和SO答案才明白2s complement
。他们帮了我很多。不过,我心中对2s complement
.
1) 2s complement
是一种存储负数的方法,以便于操作或者也有一些其他应用吗?
2) 2s complement
是电脑看到负数时自动取?
3) 取 2s complement
是 -- 编译器的工作还是由处理器完成还是什么?
4) 当2s complement
是在--编译时,运行时还是在给变量赋值时?
我看的文章是(应该推荐更好理解2s complement
):
What is “2's Complement”?
Why is two's complement used to represent negative numbers?
Is 2s complement a way to store negative numbers in order to make operation easy?
是的,这是一种存储有符号数的方法(负数和正数,不仅仅是负数)
2s complement is taken automatically when computer see a negative number?
再次否定 -> 签名。取决于架构。可以选择 1s、2s 或其他表示形式。
Taking 2s complement is -- compiler's job or done by processor or what?
编译器必须理解系统,处理器可能理解也可能不理解 2s 补码系统。
When 2s complement is taken at -- compile time, run time or at the time of assiging a value to a variable?
2s的补码可能在所有阶段都计算出来(编译,运行)
1) 是的。
2) 计算机不能"see"一个负数。它可以看到一大块二进制数据。您的应用程序拥有说 "this chunk of binary data is an integer stored in 2's compl" 的智能。但是,世界上几乎每个 CPU 都支持 2 的补码算法。
3) 编译器看到int32_t x = 0;
这样的源代码,然后意识到这个变量是以二进制补码格式存储的。如果您随后添加 x = x - 1
之类的代码,编译器会在生成您的程序时选择使用支持 2 的补码的处理器指令。处理器只做程序告诉它做的事情。它没有智能。
4) 如上所述,这是一个编译时决定。 (不太确定 "complement taken" 是什么意思...)