哇我以为我知道我的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++的新手,我想知道如何使用无符号类型.对于unsigned int类型,我知道它可以采用从0到4294967296的值.但是当我想初始化unsigned int类型时,如下所示:
unsigned int x = -10;
cout << x;
Run Code Online (Sandbox Code Playgroud)
输出似乎4294967286
得到了这个output = max value - 10.所以我想了解记忆中发生的事情?在计算继续进行的过程中,正在进行哪些处理?谢谢你的回答.
如何在Java中检查type是unsigned int还是signed int?我使用object.getExpressionType()来了解Java中的类型,但它只显示或给出long,int但不是unsigned int或signed int.我是java新手可以有人帮我这个吗?谢谢
我尝试编写一个程序来反转用户输入的数字.
用户输入范围是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.为什么?
如果我将无符号整数转换为有符号整数然后强制转换,我保证得到原始值吗?例如,这是否函数总是返回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) 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?
示例代码:
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?
我想要:
例:
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将无符号整数转换为无符号整数。 如何在不将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 解释为二进制补码?
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)