标签: unsigned-integer

unsigned int类型的函数返回负数

哇我以为我知道我的C++,但这很奇怪

这个函数返回一个unsigned int所以我认为这意味着我永远不会得到一个负数返回吗?

该函数确定您前进或后退的时间.所以对我来说,我在澳大利亚,悉尼所以我是+10 GMT,这意味着我是UTC = LocalTime +( - 10).因此,GetTimeZoneInformation正确地确定我是-10.

但我的函数返回一个unsigned int所以不应该返回10而不是-10?

unsigned int getTimeZoneBias()
{
    TIME_ZONE_INFORMATION tzInfo;
    DWORD res  = GetTimeZoneInformation( &tzInfo );

    if ( res == TIME_ZONE_ID_INVALID )
    {
        return (INT_MAX/2); 
    }

    return (unsigned int(tzInfo.Bias / 60));  // convert from minutes to hours         
}

TCHAR ch[200];
_stprintf( ch, _T("A: %d\n"), getTimeZoneBias()); // this prints out A: -10
debugLog += _T("Bias: ") + tstring(ch) + _T("\r\n");
Run Code Online (Sandbox Code Playgroud)

c c++ winapi unsigned-integer

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

无符号整数背后的想法

可能重复:
如果我为无符号变量赋值为负值会怎样?

我是C++的新手,我想知道如何使用无符号类型.对于unsigned int类型,我知道它可以采用从0到4294967296的值.但是当我想初始化unsigned int类型时,如下所示:

unsigned int x = -10;
cout << x;
Run Code Online (Sandbox Code Playgroud)

输出似乎4294967286 得到了这个output = max value - 10.所以我想了解记忆中发生的事情?在计算继续进行的过程中,正在进行哪些处理?谢谢你的回答.

c++ unsigned-integer

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

如何在Java中检查type是unsigned int还是signed int?

如何在Java中检查type是unsigned int还是signed int?我使用object.getExpressionType()来了解Java中的类型,但它只显示或给出long,int但不是unsigned int或signed int.我是java新手可以有人帮我这个吗?谢谢

java int types unsigned-integer

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

max unsigned int的反向数字

我尝试编写一个程序来反转用户输入的数字.

用户输入范围是0 <a <4294967295,这里是EDITED代码.

unsigned long int reverseNumber(unsigned long int num)
{
    unsigned long int rev = 0;

    while (num > 0)
    {
        rev = rev *10 + (num%10);
        num = num/10;
    }

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

问题是当我输入4294967295时,它会输出1632727628.为什么?我不知道为什么会这样.我怎样才能撤销4294967295.

我使用%lu将其更改为unsigned long int,printf,但仍然输出1632727628.为什么?

c unsigned-integer

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

有符号整数和无符号整数之间的转换

如果我将无符号整数转换为有符号整数然后强制转换,我保证得到原始值吗?例如,这是否函数总是返回true任何x任何平台上根据C++标准?

bool f(unsigned int x)
{
    return x == static_cast<unsigned int>(static_cast<int>(x));
}
Run Code Online (Sandbox Code Playgroud)

这个如何?

bool g(int x)
{
    return x == static_cast<int>(static_cast<unsigned int>(x));
}
Run Code Online (Sandbox Code Playgroud)

c++ standards casting unsigned-integer

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

整数提升在c ++中未签名

int main() {
    unsigned i = 5;
    int j = -10; 
    double d = i + j;
    long l = i + j;
    int k = i + j;
    std::cout << d << "\n";     //4.29497e+09
    std::cout << l << "\n";     //4294967291
    std::cout << k << "\n";     //-5
    std::cout << i + j << "\n"; //4294967291
}
Run Code Online (Sandbox Code Playgroud)

我相信在做算术运算符之前会signed int被提升unsigned.
虽然-10转换为无符号unsigned integer underflow(这是正确的术语??)将发生,并在添加后打印4294967291.

为什么在int k打印的情况下不会发生这种情况-5

c++ unsigned-integer

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

为什么负长值大于正无符号长值?

示例代码:

long num1 = -1;
unsigned long num2 = 1;

if (num1 > num2)
    printf("Num1 is greater\n");
else
    printf("Num2 is greater\n");
Run Code Online (Sandbox Code Playgroud)

为什么这会将num1> num2评为true而不是false?

c unsigned-integer long-integer

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

迭代C++中的for循环并将迭代器与负数进行比较.int可以存储unsigned int吗?

我想要:

  1. 存储默认索引值"-1".如果我完成遍历向量(使用for循环)并且索引值仍然是"-1",我知道我的for循环检查的值都没有匹配.
  2. 如果找到合适的值,则更新索引值以匹配迭代的向量中的值的索引.

例:

int index = -1;
for (int i; i < vector.size(); i++){
    if (vector[i] == 1) {
        index = i;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我总是收到关于"有符号和无符号整数表达式之间的比较"的警告for (int i; i < vector.size(); i++).不幸的是,我不能只使用unsigned integer index = -1,因为无符号整数不能存储负值. 存储unsigned int i值是否安全int index,或者我是否需要找到不同的比较方法? 在这种情况下,我会将for循环更改为for (unsigned int i; i < vector.size(); i++),但保留其余代码相同.

我可以使用一个单独的布尔变量,但每次遇到这种情况时,使用额外变量似乎更混乱.它看起来像这样:

bool found = false;
unsigned int index = -1;
for (unsigned int i; i < vector.size(); i++){
    if (vector[i] == …
Run Code Online (Sandbox Code Playgroud)

c++ integer unsigned-integer

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

不是按位运算符会破坏无符号整数?

我正在尝试让C将无符号整数转换为无符号整数。 如何在不将C解释为二进制补码的情况下反转无符号数字的位?

每当我有一个无符号整数并将其用作按位NOT运算符的操作数时,它将根据2的补数求值为负数。但是根据定义,我使用的是无符号整数,即不应该带有符号的数字

下面是我的沙盒代码。我目前正在使用GCC版本9.1.1。

#include <stdio.h>
#include <stdint.h>

int main(){
   uint8_t x = 1;//0000 0001
   printf("NOT(%d) == %d", x, ~x);//1111 1110
}

Run Code Online (Sandbox Code Playgroud)

我想要254(1111 1110)的输出,但是C将值解释为二进制补码,所以我得到-2。有没有办法让我将C 解释为二进制补码?

c types bit-manipulation unsigned-integer

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

Method that returns uint16_t array properly in C++

I have my C# code that returns uint array but I want to do it in C++. I looked other posts; they use uint pointer array where my array is not. Does anyone know how to return uint16_t array properly?

This is C# code works fine

  public static UInt16[] GetIntArrayFromByteArray(byte[] byteArray)
        {
            if ((byteArray.Length % 2) == 1)
                Array.Resize(ref byteArray, byteArray.Length + 1);


            UInt16[] intArray = new UInt16[byteArray.Length / 2];


            for (int i = 0; i < byteArray.Length; i += …
Run Code Online (Sandbox Code Playgroud)

c# c++ unsigned-integer

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