相关疑难解决方法(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万
查看次数

如何在std :: vector中找到元素位置?

我需要在std :: vector中找到一个元素位置,用它来引用另一个向量中的元素:

int find( const vector<type>& where, int searchParameter )
{
    for( int i = 0; i < where.size(); i++ ) {
       if( conditionMet( where[i], searchParameter ) ) {
           return i;
       }
    }
    return -1;
}
// caller:
const int position = find( firstVector, parameter );
if( position != -1 ) {
    doAction( secondVector[position] );
}
Run Code Online (Sandbox Code Playgroud)

但是vector::size()返回size_t对应于unsigned不能直接存储的整数类型-1.当使用size_t而不是int作为索引时,如何表示在向量中找不到元素?

c++ search stl vector

35
推荐指数
4
解决办法
12万
查看次数

为什么unsigned int 0xFFFFFFFF等于int -1?

在C或C++中,可以说size_t(无符号整数数据类型)可以容纳的最大数量与向该数据类型强制转换-1相同.例如,请参阅size_t的无效值

为什么?

我的意思是,(谈论32位整数)AFAIK最重要的位保持有符号数据类型的符号(即,位0x80000000形成负数).那么,1是0x00000001 .. 0x7FFFFFFFF是int数据类型可以容纳的最大正数.

然后,AFAIK的-1 int的二进制表示应该是0x80000001(也许我错了).为什么/如何将这个二进制值转换为完全不同的任何东西(0xFFFFFFFF)时将int转换为unsigned?或..如何形成0xFFFFFFFF的二进制-1?

我毫不怀疑在C :((unsigned int)-1)== 0xFFFFFFFF或((int)0xFFFFFFFF)== -1同样真实而不是1 + 1 == 2,我只是想知道为什么.

c c++ binary casting

26
推荐指数
3
解决办法
7万
查看次数

标签 统计

c ×2

c++ ×2

binary ×1

casting ×1

search ×1

stl ×1

type-conversion ×1

vector ×1