标签: unsigned

从 uint16_t 到 int32_t 的转换需要中间转换为 int16_t

请参阅我下面的代码。我很困惑为什么我需要先将变量转换var_u16int16_t ,然后再转换为int32_t以便在 MyFunc() 中正确解释为有符号 int。

我本以为,由于var_u16最高有效位为 1,当简单地转换为 int32_t 时编译器会理解这是一个负值。

相反,它仍然被解释为无符号值。为什么需要先中间转换为int16_t

我正在使用 gcc 8.3.0

#include <stdio.h>

void MyFunc(int32_t s32Var)
{
    printf("%d\n", s32Var);
}

int main()
{
    uint16_t var_u16 = 0x8000;
    MyFunc((int32_t)var_u16);          // prints 32768  
    MyFunc((int32_t)(int16_t)var_u16); // prints -32768 

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

c unsigned signed casting type-conversion

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

为什么在这种情况下 x = 44?


unsigned char x = 0;
unsigned char y = 150;

x = 2 * y;

cout << "x: " << (int)x << endl; // returns 44

Run Code Online (Sandbox Code Playgroud)

我知道 unsigned char 表示从 0 到 255 的 ASCII 字符,但我不知道为什么 x 打印我们的 44。

有人有我可以遵循的 ASCII 图表吗?

c++ unsigned char

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

Java 不将 0xFC 视为有符号整数?

就在我虽然对 Java 如何将所有整数/字节等视为有符号数字有一定的了解时,它又用另一个曲线球击中了我,让我思考我是否真的了解这种处理方式。

这是一段汇编代码,如果满足条件(确实满足),它应该跳转到一个地址。PC 就在跳转之前C838h,然后在条件检查之后,它应该是:C838h + FCh(h = hex),我认为它会被视为有符号,因此 PC 会向后跳转:FCh = -4 in two's compliment negative number。但令我惊讶的是,java ADDED FCh 到 PC 使其错误地跳转到C934h而不是返回到C834h.

C832: LD B,04              06 0004 (PC=C834)
C834: LD (HL), A           77 9800 (PC=C835)
C835: INC L:00             2C 0001 (PC=C836)
C836: JR NZ, n             20 00FC (PC=C934)
Run Code Online (Sandbox Code Playgroud)

我在 Java 代码中对此进行了测试,结果确实相同:

int a = 0xC838;
int b = 0xFC;
int result = a + b; …
Run Code Online (Sandbox Code Playgroud)

java unsigned

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

如何在 Rust 中将有符号整数添加到无符号整数,检查无符号溢出?

我想将 a 添加isize到 ausize并包括边界检查,以便结果不会溢出 a 的边界usize。如何才能做到这一点?

unsigned signed rust

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

unsigned u = *(unsigned*)&amp;x; 是什么意思?在 C++ 中,其中 x 是浮点变量?

由于我的数值分析课程考试临近,我正在寻找在 C/C++ 中表示浮点数的实现代码?然后我在github上找到了一行代码。您能告诉我,下面代码片段中第二行的含义是什么,以及它为何如此重要?

float x = ...;
unsigned u = *(unsigned*)&x; 
Run Code Online (Sandbox Code Playgroud)

c++ floating-point unsigned numerical-methods

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

C 和 C++ 中的“int”或“long”、“char”等类型是否始终带符号?

int当我在 C 和 C++ 开发中使用or longcharshort等时,我一直知道我有符号值。顺便说一句,根据编译器或操作系统的不同,当这些类型的默认符号变为无符号时会发生什么?我之所以询问,是因为我从未在论文或书籍中看到过对此的引用,而且我也不知道。

c c++ unsigned signed

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

如何在win32中的C编程中将char*转换为unsigned int

我想转换char*str ="10.20.30.40"; in to unsigned int.你可以告诉我任何方法或任何示例代码.请跟我分享一下

c string unsigned integer

0
推荐指数
1
解决办法
1267
查看次数

java long数据类型转换为无符号值

我正在将一些C++代码移植到Java代码中.

java中没有无符号数据类型,可以容纳64位.

我有一个哈希码,它存储在Java的long数据类型中(当然是签名的).

long vp = hashcode / 38; // hashcode is of type 'long'
Run Code Online (Sandbox Code Playgroud)

由于此处的38大于2,因此结果数可以安全地用于java中的任何其他算术.

问题是如果'hashcode'中的signed bit设置为1.我不想在变量vp中得到负值.我想要一个正值,好像数据类型是无符号的.

PS:由于性能问题,我不想为此目的使用Biginteger.

java unsigned long-integer

0
推荐指数
1
解决办法
414
查看次数

无符号整数零的位表示

我遇到了一种行为,我没想到在无符号整数上使用按位运算.我会切入我的榜样.

unsigned int a = 0;
unsigned int b = 0;
std::printf("a & b: %u\n", a & b);
std::printf("a == b: %i\n", a == b);
std::printf("a & b == a: %i\n", a & b == a);
Run Code Online (Sandbox Code Playgroud)

上面的代码产生以下输出:

a & b: 0
a == b: 1
a & b == a: 0
Run Code Online (Sandbox Code Playgroud)

最后一行让我感到困惑.不应该a & b == a评估true,因为a & b == (unsigned int)0a == (unsigned int)0

c++ unsigned bit-manipulation

0
推荐指数
3
解决办法
139
查看次数

用"U"指定无符号整数有什么意义?

我一直都是,只要我记得并无处不在,就这样做了:

for (unsigned int i = 0U; i < 10U; ++i)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我U在无符号整数上使用说明符.现在看了很长时间,我想知道为什么我这样做.除了表示意图之外,我想不出为什么它在像这样的琐碎代码中有用的原因?

是否有一个有效的编程原因,为什么我应该继续这个约定,还是多余的?

c convention unsigned

0
推荐指数
2
解决办法
304
查看次数