Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制转换为无符号整数,然后强制转换回,C_C_Stack_Int_Unsigned - Fatal编程技术网

强制转换为无符号整数,然后强制转换回,C

强制转换为无符号整数,然后强制转换回,C,c,stack,int,unsigned,C,Stack,Int,Unsigned,如果我有一个堆栈S,其中填充有签名整数,我想执行以下操作: 弹出两个值并将其转换为无符号整数,然后将它们相加,然后返回有符号和。 我做了以下操作,但不知道是否正确: unsigned int x = (unsigned int)pop(S) unsigned int y = (unsigned int)pop(S) int sum = x+y push(S, sum); pc++ 我走对了吗? 另外,有人能给我解释一下关于显式演员的一些情况吗? 谢谢。从某种意义上讲,您的代码正是您所说的应该做

如果我有一个堆栈S,其中填充有签名整数,我想执行以下操作: 弹出两个值并将其转换为无符号整数,然后将它们相加,然后返回有符号和。 我做了以下操作,但不知道是否正确:

unsigned int x = (unsigned int)pop(S)
unsigned int y = (unsigned int)pop(S)
int sum = x+y
push(S, sum);
pc++
我走对了吗? 另外,有人能给我解释一下关于显式演员的一些情况吗?
谢谢。

从某种意义上讲,您的代码正是您所说的应该做的。真正的问题是这是否是你想要实现的目标


转换为无符号整数的负数将变成非常大的正数。例如,在强制转换为unsigned后,负1成为可以用unsigned int表示的最大正整数(试试!)当您添加两个被强制转换为unsigned的负数时,您肯定会得到溢出。如果这确实是您要做的,那么您的代码肯定是在做这件事。

为什么您需要强制转换?什么类型的
pop(S)
返回?pop返回一个32位的intYa,我正在尝试这样做。但每当我打印F(“%d\n”,x)时,它仍然会给我一个带符号的整数,这就是为什么我不知道我所做的是否有效。@de1337ed这是因为你需要告诉printf不要将你的无符号转换回有符号:
printf(“%u\n”,x)
。即使你不做加法,你也会溢出。以下调用实现定义的行为:
(int)(unsigned int)-1
。您不能相信printf告诉您的内容,因为将格式字符串中的类型与传入参数中的类型相匹配是愚蠢的。您可以传入一个float并尝试使用%d打印它,printf会很乐意尝试。尝试使用“%u\n”打印。这很有意义。另一个快速问题,我需要做无符号整数x=(无符号整数)pop(S)还是无符号整数x=pop(S)就足够了?