相关疑难解决方法(0)

签署C中的无符号转换 - 它总是安全吗?

假设我有以下C代码.

unsigned int u = 1234;
int i = -5678;

unsigned int result = u + i;
Run Code Online (Sandbox Code Playgroud)

什么隐式转换在这里怎么回事,这是代码为安全的所有值ui?(安全,从某种意义上说,即使此示例中的结果会溢出到某个巨大的正数,我也可以将其转换回int并获得真实的结果.)

c type-conversion

127
推荐指数
3
解决办法
16万
查看次数

C中的无符号值

我有以下代码:

#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词是什么意思?

c printf unsigned

16
推荐指数
1
解决办法
9万
查看次数

以下c程序的输出为-10的原因

#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那么它们之间有什么区别?

c printf format-specifiers unsigned-integer

3
推荐指数
2
解决办法
108
查看次数

为什么 unsigned int 在最后一次迭代时会导致 for 循环崩溃?

以下程序会产生意想不到的结果

#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 语法,因为我需要一个变量来保存元素的位置。

c++ for-loop

1
推荐指数
1
解决办法
495
查看次数