假设我有以下C代码.
unsigned int u = 1234;
int i = -5678;
unsigned int result = u + i;
Run Code Online (Sandbox Code Playgroud)
什么隐式转换在这里怎么回事,这是代码为安全的所有值u
和i
?(安全,从某种意义上说,即使此示例中的结果会溢出到某个巨大的正数,我也可以将其转换回int并获得真实的结果.)
我有以下代码:
#include <stdio.h>
int main() {
unsigned int a = -1;
int b = -1;
printf("%x\n", a);
printf("%x\n", b);
printf("%d\n", a);
printf("%d\n", b);
printf("%u\n", a);
printf("%u\n", b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
ffffffff
ffffffff
-1
-1
4294967295
4294967295
Run Code Online (Sandbox Code Playgroud)
我可以看到根据传递给printf
函数的值将值解释为有符号或无符号.在这两种情况下,字节都是相同的(ffffffff
).那么,这个unsigned
词是什么意思?
#include <stdio.h>
int main() {
unsigned int a = -10;
printf("a=%d\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是打印-10
签名int
.如果签名和未签名都打印,-10
那么它们之间有什么区别?
以下程序会产生意想不到的结果
#include <iostream>
using namespace std;
int main() {
for(unsigned int i = 10; i >= 0; i--)
{
cout << i << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但更改unsigned int
为仅int
给出输出 10,9,8...,0
拥有 anunsigned int
并使用它来迭代值 [n, 0] (包括)的正确方法是什么?我迭代数组的每个元素,但不想使用 foreach 语法,因为我需要一个变量来保存元素的位置。