gpt4 book ai didi

c - 难以理解未签名

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:47 25 4
gpt4 key购买 nike

我无法理解为什么 c 在以下程序中等于 -61:

   main() {
unsigned int a = 60; // 60 = 0011 1100
unsigned int b = 13; // 13 = 0000 1101
int c = 0;
c = ~a; //-61 = 1100 0011
printf("Line 4 - Value of c is %d\n", c );
}

我确实了解 NOT 运算符如何在 0011 1100 上工作(解决方案是 1100 0011)。但是我不确定为什么十进制数会增加 1。这是从 unsigned int(从 a)到 signed int(从 c)的某种类型转换吗?

最佳答案

二进制补码(标准有符号格式)中的正数转换为负数构成按位取反,加一。

请注意,为简单起见,我使用的是单个有符号字节。

So if 60 = 0011 1100
Then c = 1100 0011 + 1
= 1100 0100

对于有符号字节,最高有效位为负,所以

c = -128 + 64 + 4 = -60

您需要加 1 以说明最高有效位是 -128,而最大正数是 0111 1111 = 127。所有负数都有一个 1 表示 -128,需要进行抵消。

当您查看将 0 转换为 -0 时,很容易看出这一点。将 00000000 取反,得到 11111111,加一得到 00000000。对 1 和 -1 做同样的操作,得到 11111111 - 最大可能的负数。

关于c - 难以理解未签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55152772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com