如何查看变量的类型,无论是无符号32位,带符号16位等等?
我该如何看待它?
在C++中迭代向量的正确方法是什么?
考虑这两个代码片段,这个工作正常:
for (unsigned i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
for (int i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)
产生warning: comparison between signed and unsigned integer expressions.
我是C++世界的新手,所以unsigned变量对我来说有点可怕,我知道unsigned如果使用不正确,变量会很危险,所以 - 这是正确的吗?
我是否正确地说有符号和无符号整数之间的区别是:
还有其他差异吗?
我有一个简单的程序:
#include <stdio.h>
#define INT32_MIN (-0x80000000)
int main(void)
{
long long bal = 0;
if(bal < INT32_MIN )
{
printf("Failed!!!");
}
else
{
printf("Success!!!");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
条件if(bal < INT32_MIN )总是如此.这怎么可能?
如果我将宏更改为:
#define INT32_MIN (-2147483648L)
Run Code Online (Sandbox Code Playgroud)
有谁可以指出这个问题?
此代码是否总是评估为false?这两个变量都是两个补码签名的整数.
~x + ~y == ~(x + y)
Run Code Online (Sandbox Code Playgroud)
我觉得应该有一些数字满足条件.我试过测试之间的数字-5000,5000但从未达到平等.有没有办法建立一个方程来找到条件的解?
将一个换成另一个导致我的程序中的一个阴险的错误?
在"C的完整参考"一书中,提到char默认情况下是无符号的.
但我试图用GCC和Visual Studio验证这一点.它默认签名.
哪一个是正确的?
我想在C++中将十六进制字符串转换为32位有符号整数.
因此,例如,我有十六进制字符串"fffefffe".二进制表示形式为11111111111111101111111111111110.有符号整数表示形式为:-65538.
如何在C++中进行此转换?这也需要适用于非负数.例如,十六进制字符串"0000000A",二进制为00000000000000000000000000001010,十进制为10.
我知道int和long(32位和64位数字),但是什么uint和ulong?
我试图理解为什么以下代码不会在指定的位置发出警告.
//from limits.h
#define UINT_MAX 0xffffffff /* maximum unsigned int value */
#define INT_MAX 2147483647 /* maximum (signed) int value */
/* = 0x7fffffff */
int a = INT_MAX;
//_int64 a = INT_MAX; // makes all warnings go away
unsigned int b = UINT_MAX;
bool c = false;
if(a < b) // warning C4018: '<' : signed/unsigned mismatch
c = true;
if(a > b) // warning C4018: '<' : signed/unsigned mismatch
c = true;
if(a <= b) // warning C4018: …Run Code Online (Sandbox Code Playgroud) 在我的代码中,我不使用int或unsigned int.我只使用size_t或ssize_t进行移植.例如:
typedef size_t intc; // (instead of unsigned int)
typedef ssize_t uintc; // (instead of int)
Run Code Online (Sandbox Code Playgroud)
因为strlen,string,vector...全部使用size_t,所以我通常使用size_t.我只会ssize_t在它可能是负面时使用.
但我发现:
无符号整数类型非常适合将存储视为位数组的用途.使用无符号而不是int来再获得一位来表示正整数几乎不是一个好主意.通过声明无符号变量来确保某些值为正的尝试通常会被隐式转换规则所取代.
在"C++编程语言 "一书中.
所以我很困惑.我错了吗?为什么STL不遵守书中的建议?