gpt4 book ai didi

c - 内存中数据的有符号和无符号表示?

转载 作者:行者123 更新时间:2023-11-30 20:14:48 27 4
gpt4 key购买 nike

请参阅下面的代码,

signed int a = 136; 
unsigned int b = -120;

unsigned sum = a + b;
printf("%d ", sum);

输出 - 16

据我所知,

十六进制表示

136 - ox88
-120 - ox88

1) 所以它应该打印 0。不是吗?

2) -ve(signed) 数字如何在内存中表示为 unsigned int ?是这样吗

-120 = 0xffffff88
136 = 0x00000088

如果是的话,在unsigned int范围内可能有一个等于“0xffffff88”的值,那么会互相冲突吗?

任何人都可以用示例解释这个概念吗?(有符号和无符号表示)

最佳答案

无需猜测事物在内存中的表示方式,2 的补码算术与字节序无关。

考虑以下程序。

#include <stdio.h>


int main(){
signed int a = 136;
unsigned int b = -120;

unsigned sum = a + b;
printf("a = 0x%x b = 0x%x sum = 0x%x\n", a,b, sum);
}

输出:

a = 0x88 b = 0xffffff88 sum = 0x10

在 2 的补码中,我们可以将 ab 进行二进制求和,而不必担心符号。

当我们手动求和时,我们将得到a + b = 0x100000010。由于第一个 1 溢出,因此它被简单地丢弃,留下 0x10,即 16

关于c - 内存中数据的有符号和无符号表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054503/

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