标签: unsigned-integer

C++ 中的位图 - unsigned int 会完成这项工作吗?

我不敢承认,我已经有一段时间没有使用 C++了,但我现在不得不使用了,而且我有点生疏了。
我需要一个位图,而且我确实关心性能,我的位图大小将不再是 25 位。
我正在考虑使用 unsigned int,但恐怕我不记得它是如何在 c/c++ 中

实现的 unsigned int 是作为常规二进制数实现的吗?
我也对位图的任何其他建议持开放态度。
在此先感谢您的帮助!

c c++ bitmap unsigned-integer

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

如何汇编没有签名和无符号的减法指令?

我正在为它制作一个虚拟机和一个C编译器.我没有得到的是大多数指令集有IMUL和IDIV但不是ISUB和IADD.由于sub通常是unsigned sub,我怎么能像x86那样做

MOV EAX,1
MOV EDX,3
SUB EAX,EDX,EAX
Run Code Online (Sandbox Code Playgroud)

得到-2?

assembly signed unsigned-integer

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

printf格式,用于两个无符号整数的差值

在纯ANSI C(C89)中,我有以下内容.

unsigned y=<smallnumber>,x=y+3;
printf("%<whatgoeshere>\n",x-y);
Run Code Online (Sandbox Code Playgroud)

%绝对肯定会打印后放入什么3?我可以在这里看到两者的参数%u(如果两个操作数都是无符号的结果)和%d(int在传递参数时将积分表达式转换为printf).

当然,两者都适用于任何合理的编译器,这正是我在这里问的原因.:-)我感觉只有一个是真正正确的标准(但即使这可能是错误的).

c printf ansi unsigned-integer

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

一元 - 和n之间有区别吗?

我相当肯定uint8_t从另一个中减去一个应该导致另一个无符号数,但我的一些结果让我感到困惑.

  uint8_t a = 2;
  uint8_t b = 1;
  uint8_t c = -a;
  long d = b - a;
  long e = b + c;
Run Code Online (Sandbox Code Playgroud)

当我获得d它产生的价值时-1,e正如我所期望的那样255.这是gcc我正在使用的版本的错误.....对吗?

作为参考,我正在使用arm-none-eabi-g++编译器MSP-432.

看着似乎表明gcc这里似乎犯了同样的错误.

看看这个问题似乎看起来像神弩和手臂gcc是错误的.

这里发生了什么?

c++ gcc compiler-bug unsigned-integer

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

如何安全地比较两个无符号整数计数器?

我们有两个无符号计数器,我们需要比较它们以检查一些错误条件:

uint32_t a, b;
// a increased in some conditions
// b increased in some conditions
if (a/2 > b) {
   perror("Error happened!");
   return -1;
}
Run Code Online (Sandbox Code Playgroud)

问题是,ab会溢出一些日子.如果a溢出,它仍然可以.但如果b溢出,那将是一种误报.如何使这个检查防弹?

我知道制作ab uint64_t会延迟这种误报.但它仍然无法完全解决这个问题.

===============

让我澄清一点:计数器用于跟踪内存分配,这个问题可以在dmalloc/chunk.c中找到:

#if LOG_PNT_SEEN_COUNT
  /*
   * We divide by 2 here because realloc which returns the same
   * pointer will seen_c += 2.  However, it will never be more than
   * twice the iteration value.  We divide …
Run Code Online (Sandbox Code Playgroud)

c c++ integer-overflow unsigned-integer

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

如何保证 const 变量不会发生溢出?

我可以描述这个“圆形”六边形网格的尺寸..

圆形六角网格

..n在编译时只定义了1 个值:

const GRID_RADIUS: usize = 3;
Run Code Online (Sandbox Code Playgroud)

因此,网格中的单元格数量在编译时也是已知的,因为它是(2n+1)^2-n*(n+1)(此处为 37)。

但是,以下内容:

const GRID_RADIUS: usize = 3;
Run Code Online (Sandbox Code Playgroud)

不编译:

const N: usize = 3;
const N_CELLS: usize = ((2 * N + 1) ^ 2) - N * (N + 1);

struct Cell;

struct Grid {
    cells: [Cell; N_CELLS],
}
Run Code Online (Sandbox Code Playgroud)

我知道rustc担心减去usize类型可能会导致溢出,但我可以保证N_CELLS在这种情况下总是积极的。

我怎么能为此承担责任并rustc信任我?

compiler-errors constants integer-overflow unsigned-integer rust

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

安全倒计时循环

当 i 达到 -1 时,以下代码将由于整数溢出而产生段错误。如果我将“unsigned int i”更改为“char i”,那么它将正常工作,但会生成编译器警告“数组下标具有类型'char'”。将其声明为“int i”会很好地工作,并且不会出现编译器警告,但感觉应该有。毕竟 int 也是有符号的,并且也可能变为负值。我的问题是,是否有一种安全、优雅、惯用的方式在 C 中编写此类循环?

#include <stdio.h>

int main() {
    unsigned int i;
    char a[10] = {0};

    for (i = 9; i >= 0; i--) {
        printf("a[%d]: %d\n", i, a[i]);
    }

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

c reverse for-loop unsigned-integer

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

将十六进制扫描(scanf)从unsigned int数组转换为十进制数

我在这里试图将4位六进制转换为dec但是没有成功.这是我的代码.

unsigned int array[4];                         

printf("Type in 4-digit hexa: \n");

scanf("%x", &array);

while(getchar() != '\n');

printf("Your number in dec is %u \n", array);
Run Code Online (Sandbox Code Playgroud)

我不知道它有什么问题,但它不会给出正确的dec输出.就像我放入EEFF一样,它应该发出61183但程序仍然打印出65518.

这个号码来自哪里?我的代码出了什么问题?根据我的考虑,我使用unsigned int,FFFF等于65385,unsigned int的范围是0到65535.数据范围应该没有问题,我也使用了%u.

在我完成一些搜索之后,我现在唯一能想到的就是这个问题可能与unsigned int的大小有关,也可能与int或sth有关.我读了解释但不太明白.

我知道,这可能是一个重复,但我在这里要求更简单地解释为什么这不起作用.说实话,我对这个网站和编程都是一个绝对新手,所以请用编码方便我.仅供参考,除了stdio.h之外我什么都不知道.

c hex unsigned-integer

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

为什么unsigned int在c ++中给出负值?

我有两个函数add和main如下.

int add(unsigned int a, unsigned int b)
{
    return a+b;
}

int main()
{   
   unsigned int a,b;
   cout << "Enter a value for a: ";
   cin >> a;
   cout << "Enter a value for b: ";
   cin >> b;
   cout << "a: " << a << "   b: "<<b <<endl;
   cout << "Result is: " << add(a,b) <<endl;

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

当我运行这个程序时,我得到以下结果:

Enter a value for a: -1
Enter a value for b: -2
a: 4294967295   b: 4294967294
Result …
Run Code Online (Sandbox Code Playgroud)

c++ unsigned-integer

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

无符号整数多语法

我是新来的C++,并想知道如果有之间的差异uint32_ttUInt32?它只是语法糖吗?或者它只是结果using namespace std;

我知道它们代表什么(参见:https://www.badprog.com/c-type-what-are-uint8-t-uint16-t-uint32-t-and-uint64-t).我很困惑为什么有两种不同的方式来表示它们以及使用哪种方法.

虽然我已搜查所以用uint32_ttUInt32,我希望这不是一个重复.

感谢您的时间.

c++ types unsigned-integer

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