我在我的哈希表实现上使用FNV哈希作为哈希算法,但我在这一行的问题标题中收到警告:
unsigned hash = 2166136261;
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样,因为当我这样做时:
printf("%u\n", UINT_MAX);
printf("2166136261\n");
Run Code Online (Sandbox Code Playgroud)
我明白了:
4294967295
2166136261
Run Code Online (Sandbox Code Playgroud)
这似乎是在我的机器的限制下......
为什么我会收到警告,有什么方法可以摆脱它?
我在铸造方面有点差.我有一个字符串xmlChar*(这是unsigned char*),我想将这个unsigned char转换为一个std::string类型.
xmlChar* name = "Some data";
Run Code Online (Sandbox Code Playgroud)
我尽力输入,但我无法转换它.
在很多代码示例,源代码,库等中.我看到使用int时,就我所知,unsigned int更有意义.
我看到很多的地方是for循环.见下面的例子:
for(int i = 0; i < length; i++)
{
// Do Stuff
}
Run Code Online (Sandbox Code Playgroud)
为什么你会使用一个int而不是一个unsigned int?这只是懒惰 - 人们不会打字打扰unsigned吗?
根据http://en.cppreference.com/w/cpp/io/streamsize
类型std :: streamsize是一个带符号的整数类型,用于表示在I/O操作中传输的字符数或I/O缓冲区的大小.
据我所知,流的大小永远不会是负数,因此,我的问题是:
为什么std::streamsize定义为签名而不是未签名?背后的理由是什么?
C是否处理十六进制常量(例如0x23FE)和signed或unsigned int?
我想x通过套接字传递一个32位有符号整数.为了让接收器知道预期的字节顺序,我htonl(x)在发送之前调用.htonl期待一个,uint32_t但我想确定当我把我int32_t带到一个时会发生什么uint32_t.
int32_t x = something;
uint32_t u = (uint32_t) x;
Run Code Online (Sandbox Code Playgroud)
总是这样的情况,每个字节x和u每个字节都完全相同吗?怎么回事:
uint32_t u = something;
int32_t x = (int32_t) u;
Run Code Online (Sandbox Code Playgroud)
我意识到负值会转换为大的无符号值,但这并不重要,因为我只是回到了另一端.但是,如果使用实际字节进行混乱,那么我无法确定返回将返回相同的值.
嗨,我有一个程序,处理很多这些向量的元素的向量和索引,我想知道:
uint和之间有区别吗?unsigned int int因为我读了一些人说编译器确实更有效地处理int值,但如果我使用int我将不得不总是检查负idxs这是痛苦.vectorx[idx]吗?ps软件将处理大数据流程,良好的性能是必须要求的
以下结果让我很困惑:
int i1 = 20-80u; // -60
int i2 = 20-80; // -60
int i3 =(20-80u)/2; // 2147483618
int i4 =(20-80)/2; // -30
int i5 =i1/2; // -30
Run Code Online (Sandbox Code Playgroud)
i3似乎计算为(20u-80u)/2,而不是(20-80u)/2i3是一样的i5.对于以下代码段:
size_t i = 0;
std::wstring s;
s = (i < 0) ? L"ABC" : L"DEF";
s = (i != -1) ? L"ABC" : L"DEF";
Run Code Online (Sandbox Code Playgroud)
i < 0正如预期的那样,PVS-Studio分析记录第一个条件的警告:
V547 Expression 'i < 0' is always false. Unsigned type value is never < 0. test_cpp_vs2017.cpp 19
例如,为什么PVS不会发出关于第二个,也是可疑情况的警告,并将其i != -1报告为总是如此?