标签: unsigned

C++标准是否要求最大无符号整数的形式为2 ^ N-1?

为了T使std::is_integral<T>::value && std::is_unsigned<T>::valueIS true,不C++标准保证:

std::numeric_limits<T>::max() == 2^(std::numeric_limits<T>::digits)-1
Run Code Online (Sandbox Code Playgroud)

在数学意义上?我正在寻找基于标准引用的证据.

c++ standards unsigned language-lawyer c++11

20
推荐指数
2
解决办法
966
查看次数

C++:大型unsigned int的编译器警告

我有以下数组,我需要在位图上手动操作.

const unsigned int BITS[32] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 
                               2048, 4096, 8192, 16384, 32768, 65536, 131072, 
                               262144, 524288, 1048576, 2097152, 4194304, 
                               8388608, 16777216, 33554432, 67108864, 134217728, 
                               268435456, 536870912, 1073741824, 2147483648};
Run Code Online (Sandbox Code Playgroud)

不幸的是,编译时我得到了

警告:此十进制常量仅在ISO C90中无符号

我该如何删除?

c++ int unsigned warnings

19
推荐指数
2
解决办法
1万
查看次数

获取没有显式特征的整数模板参数的有符号/无符号变体

我想定义一个模板类,其模板参数将始终是一个整数类型.该类将包含两个成员,一个是类型,另一个是类型T的无符号变体T- 即if T == int,then T_Unsigned == unsigned int.我的第一直觉是这样做:

template <typename T> class Range {
    typedef unsigned T T_Unsigned; // does not compile
public:
    Range(T min, T_Unsigned range);
private:
    T m_min;
    T_Unsigned m_range;
};
Run Code Online (Sandbox Code Playgroud)

但它不起作用.然后我考虑使用部分模板专业化,如下所示:

template <typename T> struct UnsignedType {}; // deliberately empty
template <> struct UnsignedType<int> {
    typedef unsigned int Type;
};

template <typename T> class Range {
    typedef UnsignedType<T>::Type T_Unsigned;
    /* ... */
};
Run Code Online (Sandbox Code Playgroud)

只要您UnsignedType每个整数类型进行部分专门化,这都可以.这是一些额外的复制粘贴工作(削减明智地使用宏),但可以使用. …

c++ unsigned templates partial-specialization traits

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

为什么比较无符号Int> = 0"无意义比较"?

我收到警告:

Pe186"无符号int与零的无意义比较"

当我尝试编译以下代码时:

for(clLoop = cpLoopStart; clLoop >= 0; clLoop--)                                  
{
    //Do something
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么.我能理解,如果我正在寻找一个小于零的值,因为一个unsigned int永远不会是负面的.但是,所有我在这里寻找是,如果它是等于为零,其中unsigned int当然也可以.

我甚至可以看到这个错误,如果在这个循环中我试图预先减少而不是后减量,但是情况并非如此.

c c++ comparison unsigned for-loop

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

"?:"发生了什么?我不知道返回类型

我认为((1 ? (int)1 : (unsigned int)2) > -1)结果是1(true),但实际上它0在Visual Studio 2017中是(假的).

我认为价值(1 ? (int)1 : (unsigned int)2)应该是(int)1,因为1 ?是真的,而且1 > -1是真的.

我不知道为什么这个表达式的最终结果是错误的.

当我尝试转换时((int)(1 ? (int)1 : (unsigned int)2) > -1),它返回1(true).

signed int test = -1;
signed int si = 1;
unsigned int ui = 2;

printf("%d\n", ((1 ? si : ui) > test));
return 0;
Run Code Online (Sandbox Code Playgroud)

我希望输出是1,但实际输出是0.

c unsigned signed ternary-operator conditional-operator

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

将char*转换为unsigned char*

如何在C中正确地将char*复制到unsigned char*.以下是我的代码

int main(int argc, char **argv)
{
    unsigned char *digest;

    digest = malloc(20 * sizeof(unsigned char));
    strncpy(digest, argv[2], 20);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想正确地将char*数组复制到unsigned char*数组.我使用上面的代码得到以下警告

warning: pointer targets in passing argument 1 of âstrncpyâ differ in signedness 
Run Code Online (Sandbox Code Playgroud)

编辑:添加更多信息,我的要求是调用者在主函数中提供SHA摘要作为命令行上的字符串,主函数在内部将其保存在摘要中.SHA摘要可以使用unsigned char最好地表示.

现在的问题是我无法更改main函数(**char)的签名,因为main函数解析了它需要的其他参数作为char*而不是unsigned char*.

c unsigned sha1 char strcpy

18
推荐指数
2
解决办法
4万
查看次数

计算存储十进制数所需的位数

这是一个我坚持的功课问题.

考虑无符号整数表示.存储包含以下内容的十进制数需要多少位:

i) 3 digits ii) 4 digits iii) 6 digits iv) n digits
Run Code Online (Sandbox Code Playgroud)

我知道无符号整数的范围是0到2 ^ n,但我不知道表示数字所需的位数如何取决于它.请帮帮我.

提前致谢.

unsigned decimal unsigned-integer

18
推荐指数
3
解决办法
10万
查看次数

当我混合有符号和无符号类型时会发生什么?

我正在学习C++语言,我对类型转换有一些疑问,你能解释一下像这样的表达式会发生什么:

unsigned int u = 10; 
int a = -42; 
std::cout << u - a << std::endl;
Run Code Online (Sandbox Code Playgroud)

在这里我知道如果我在有两个数学运算符时应用规则,结果将是52.但我想知道当编译器将a转换为无符号值时会发生什么情况会产生一个临时的无符号类型,之后会发生什么?表达式现在应该是10 -4294967254.

c++ unsigned expression built-in-types

18
推荐指数
2
解决办法
6517
查看次数

为符号值分配给无符号整数时,为什么编译器没有给出错误? - C++

我知道unsigned int不能保持负值.但是以下代码编译时没有任何错误/警告.

unsigned int a = -10;
Run Code Online (Sandbox Code Playgroud)

当我打印变量a时,打印出错误的值.如果无符号变量不能保存有符号值,为什么编译器允许它们编译而不给出任何错误/警告?

有什么想法吗?

编辑

编译器:VC++编译器

需要使用警告级别4.

c++ variables unsigned compiler-errors compiler-warnings

17
推荐指数
2
解决办法
3909
查看次数