如何辨别电脑整数带符号?(How computer distinguish an integer i

2019-07-29 18:12发布

二进制补码设置,使其更容易对电脑计算两个数的减法。 但如何区分电脑的整数符号整数或无符号整数? 这只是0,并在其内存1。

对于〔实施例, 1111 1111在计算机存储器可以表示编号255,但也可以代表-1。

Answer 1:

符号和无符号使用相同的数据,但不同的指令。

在电脑卖场符号和无符号整数为相同的数据。 即255和-1是相同的比特。 但是,你告诉变量是什么类型的编译器。 如果签约,编译器使用运营商签订的操纵变量(例如IDIV)和无符号时,它使用另一个指令(例如DIV)。 因此编译器的程序,它告诉CPU如何解释数据。



Answer 2:

它不区分它们。 但与补充,计算是一样的:

下面, d将被追加成十进制数,和b为二进制数。 计算将在8个整数。

-1d + 1d = 1111 1111b + 1b = 1 0000 0000b

但由于我们溢出(是的,这是8个0 S和1对8个整数),结果为0。

-2d + 1d = 1111 1110b + 1b = 1111 1111b = -1d

-1d + 2d = 1111 1111b + 10b = 1 0000 0001b (this overflows) = 1b = 1d

-1d + -1d = 1111 1111b + 1111 1111b = 1 1111 1110b (this overflows) = 1111 1110b = -2d

如果你考虑在无符号这些操作(二进制值将保持不变):

255d + 1d = 1111 1111b + 1b = 1 0000 0000b (this overflows) = 0d

254d + 1d = 1111 1110b + 1b = 1111 1111b = 255d

255d + 2d = 1111 1111b + 10b = 1 0000 0001b (this overflows) = 1b = 1d

255d + 255d = 1111 1111b + 1111 1111b = 1 1111 1110b (this overflows) = 1111 1110b = 2d

无符号与签署因此是无符号只是一个视觉表示,仅显示用于人:-)时使用



文章来源: How computer distinguish an integer is signed or unsigned?