gpt4 book ai didi

c - c中的无符号整数

转载 作者:行者123 更新时间:2023-12-02 06:22:24 26 4
gpt4 key购买 nike

给定如下所示的程序,如何识别带符号的整数是否会变为 -ve 或 +value。

int main()
{
int a=0xDEADBEEF;
printf("%d",a);
return 0;
}

这在 -ve 中输出。但是有什么简单的方法可以快速识别它而无需在 visual studio 中执行。

最佳答案

通过一些位魔法:

int negative = (input >> ((sizeof(int) * 8) - 1)) & 0x01;

解释一下:

在 C 中,负数是二进制补码,其中最高位表示符号。我们首先使用 sizeof(int) * 8 确定 int 在当前平台上有多少位。要通过右移获得最高位,我们需要移动size - 1。由于右移在 C 中是算术的(意味着如果最高位是 1,我们从左边开始用 1 填充 int),我们需要杀死所有额外的使用逻辑位和 0x01(或简单地 1,无论您喜欢什么)。

如果输入为负,结果为 int,值为 1,如果为正,则为 0

如果你想在纸上做,取高字节(在你的例子中,DE),写出上半部分(D)并检查高位其中的一个是零或一个。

关于c - c中的无符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968489/

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