标签: unsigned-integer

用于指定任何无符号整数类型的 C++ 模板特征

I\xe2\x80\x99m 尝试实现一个仅接受无符号整数类型的函数。以下是我迄今为止尝试过的。它适用于“unsigned int”,但为什么 \xe2\x80\x99t 不能编译为“unsigned Short”?

\n\n
#include <iostream>\n#include <type_traits>\n\ntemplate<typename T, class = typename std::enable_if<std::is_unsigned<T>::value>::type>\ninline const T oddProduct(T n) noexcept {\n    return (n <= 1) ? n : (n % 2) ? oddProduct(n - 2)*n : oddProduct(--n);\n}\n\nint main() {\n    std::cout << "Product of odd integers from 1 to 15: " << oddProduct<unsigned short>(15) << std::endl;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:MSVS 2017 社区 C++14 选项。

\n

c++ templates traits unsigned-integer

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

如何从 Kotlin JVM 的字节数组中获取无符号整数?

Kotlin 1.3 引入了无符号整数类型,但我似乎无法弄清楚如何从ByteArrayKotlin JVM 中的a 获取无符号整数。

Kotlin Native 有一个方便的ByteArray.getUIntAt()方法,但是 Kotlin JVM 不存在这个方法。

val bytes: ByteArray = byteArrayOf(1, 1, 1, 1)
val uint: UInt // = ???
Run Code Online (Sandbox Code Playgroud)

我在这里有哪些选择?有没有比使用 aByteBuffer或位移位更优雅的方法呢?

arrays byte jvm unsigned-integer kotlin

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

C++ 无符号和有符号转换

我以前见过这种问题,但提供的答案并没有让我明白一切。发布此问题时,通常会附上下一个示例:

#include <iostream>

int main()
{
    unsigned int u = 10;
             int i = -42;

    std::cout << i + i << std::endl;
    std::cout << i + u << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

-84
4294967264
Run Code Online (Sandbox Code Playgroud)

所有按预期工作 int 转换为无符号。但是,如果 的绝对值i小于 ,u则似乎没有发生这种转换。

#include <iostream>

int main()
{
    unsigned int u = 10;
             int i = -3;

    std::cout << i + i << std::endl;
    std::cout << i + u << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

-6
7
Run Code Online (Sandbox Code Playgroud)

我没有看到任何提到它的答案,也找不到任何解释。尽管这似乎是合乎逻辑的事情发生,但我对此没有任何解释。

c++ unsigned-integer

6
推荐指数
2
解决办法
150
查看次数

将无符号 int 转换为 char 数组。伊托亚的替代品?

我有一个关于无符号整数的问题。我想将 unsigned int 转换为 char 数组。为此,我使用 itoa。问题是 itoa 可以正常处理 int,但不能处理 unsigned int(unsigned int 被视为普通 int)。我应该如何将 unsigned int 转换为 char 数组?

预先感谢您的帮助!

c++ arrays char itoa unsigned-integer

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

C 如何在有符号整数和无符号整数中存储负数?

这是示例:

#include <stdio.h>

int main()
{
    int x=35;
    int y=-35;
    unsigned int z=35;
    unsigned int p=-35;
    signed int q=-35;
    printf("Int(35d)=%d\n\
Int(-35d)=%d\n\
UInt(35u)=%u\n\
UInt(-35u)=%u\n\
UInt(-35d)=%d\n\
SInt(-35u)=%u\n",x,y,z,p,p,q);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Int(35d)=35
Int(-35d)=-35
UInt(35u)=35
UInt(-35u)=4294967261
UInt(-35d)=-35
SInt(-35u)=4294967261
Run Code Online (Sandbox Code Playgroud)

我将值声明为有符号整数还是无符号整数真的很重要吗?因为,C实际上只关心我如何从内存中读取值。请帮助我理解这一点,我希望你证明我错了。

c int unsigned-integer

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

unsigned int to unsigned long long well defined?

我想看看当unsigned long long被分配了一个值的幕后发生了什么unsigned int.我做了一个简单的C++程序来尝试它并将所有io移出main():

#include <iostream>
#include <stdlib.h>

void usage() {
        std::cout << "Usage: ./u_to_ull <unsigned int>\n";
        exit(0);
}

void atoiWarning(int foo) {
        std::cout << "WARNING: atoi() returned " << foo << " and (unsigned int)foo is " <<
 ((unsigned int)foo) << "\n";
}

void result(unsigned long long baz) {
        std::cout << "Result as unsigned long long is " << baz << "\n";
}

int main(int argc, char** argv) {
        if (argc != 2) usage();

        int …
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly x86-64 unsigned-integer

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

编译器错误:从 int* 到 unsigned int* 的无效转换 [-fpermissive]

我今天遇到了最奇怪的问题。我正在使用一个在线示例,令我惊讶的是,它不起作用(他们几乎从不这样做)。我自己去修复它,但我似乎被这个错误困住了:

Error: Invalid Conversion from int* to unsigned int* [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我明白这一点。我正在提供一个int*,它想要一个unsigned int*. 不过,我真的不知道为什么int*产生的。

这是引发问题的片段代码:

unsigned char md_value[EVP_MAX_MD_SIZE];
int md_length;

EVP_DigestFinal_ex(md_ctx, md_value, &md_length);
Run Code Online (Sandbox Code Playgroud)

该函数调用的第三个参数&md_length导致了问题。查看该函数调用的文档(来自 OpenSSL,如果重要的话),它希望参数是unsigned int*类型的,因为它需要一个地址(或者至少我正在使用的示例是如何使用的)它)

有趣的是,我认为&操作员返回了一个unsigned int*,因为返回一个int*没有意义,因为计算机的内存中没有负地址。

这是我正在遵循的示例,如果您想看一看:https : //www.openssl.org/docs/crypto/EVP_DigestInit.html

下面是源代码,如果你想自己尝试一下。我怀疑你真的需要阅读它来解决这个问题,但把它放在这里不会有什么坏处。

源代码:

//* Description *//
// Title: Example
// Author: Boom Blockhead
// Example Program to Test OpenSSL

//* Libraries *//
#include <stdio.h>
#include <cstring> …
Run Code Online (Sandbox Code Playgroud)

c++ pointers integer compiler-errors unsigned-integer

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

在32位架构上优化便携式128位整数移位

在业余时间,我一直在研究一个实用程序库,除其他外,它支持有符号/无符号的128位整数.在某些情况下,此库使用cpu-dispatching来使用simd指令,但需要可移植的后备,因此它将在其他任何地方运行.最近我实现了128位移位的便携式回退.它运行正常并且运行速度相当快,但它没有我想要的那么快,尤其是在32位架构上.

这是一个带有所有相关类型和功能的剥离版本(包括完整性的64位版本):

typedef uint32_t UInt32;
typedef int32_t Int32;
typedef uint64_t UInt64;
typedef int64_t Int64;

// Returns 0xFFFFFFFF if value != 0, otherwise returns 0.
UInt32 AllOrNothingMask32(Int32 value)
{
    return UInt32(-Int32(value != 0));
}

struct alignas(16) UInt128
{     
    // Ensure the layout matches the architecture.
    // LE = little endian
    // BE = big endian
#if CPU_TYPE == CPU_LE32
    UInt32 mLow;
    UInt32 mLowMid;
    UInt32 mHighMid;
    UInt32 mHigh;
#elif CPU_TYPE == CPU_BE32
    UInt32 mHigh;
    UInt32 mHighMid;
    UInt32 mLowMid;
    UInt32 mLow;
#elif CPU_TYPE …
Run Code Online (Sandbox Code Playgroud)

c++ optimization integer unsigned-integer c++11

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

处理无符号整数

我知道无符号整数是臭名昭著的,C++ 开发人员通常会避免使用无符号整数。我有一个包含两个int不应包含负值的成员变量的类:

.
.
.
private:
    int m_Y_AxisLen;
    int m_X_AxisLen;
.
.
.
Run Code Online (Sandbox Code Playgroud)

我以防止输入任何负数的方式设计了成员函数的逻辑。所以我确保这两个成员不会被分配负值。但是当我使用PVS-Studio
时,这也会带来一些警告。例如这里:

for ( int row = 0; row < getY_AxisLen( ); ++row )
{
    for ( int column = 0; column < getX_AxisLen( ) - 1; ++column )
    {
        if ( m_characterMatrix[ row ][ column ] == getFillCharacter( ) )
        {
            m_characterMatrix[ row ][ column ] = fillCharacter;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

PVS-Studio 责怪我的索引row和类型column不正确memsize。这可能意味着我应该使用std::size_t row …

c++ arrays static-code-analysis unsigned-integer pvs-studio

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

uint 之间的差异可以为负数

我有一个关于 C/C++ 中无符号整数的问题。它们以及对它们的运算结果应始终为正或等于零,但与 uint16_t 的差异看起来并非如此。uint 在 C++ 头文件 cstdint 中定义。

下一个程序采用“错误”分支:

uint16_t beg = 7;
uint16_t end = 6;
uint16_t zero = 0;

if (end - beg >= zero) cout << "This branch is always taken.\n";
else cout << "This branch will never be taken.\n";
Run Code Online (Sandbox Code Playgroud)

我在我的计算机(gcc 9.3.0)和编译器资源管理器上进行了测试,结果相同。

为了解决这个问题,我必须将差异转换为 uint16_t:

if (uint16_t(end - beg) >= zero) cout << "This branch is always taken.\n";
else cout << "This branch will never be taken.\n";
Run Code Online (Sandbox Code Playgroud)

c++ unsigned-integer

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