标签: integer-overflow

读取 Active Directory 中组的 SECURITY_ENABLED 标志

我正在尝试读取组 groupType 属性的SECURITY_ENABLED标志。问题是我使用的价值

DirectoryEntry entry...
entry.Properties["groupType"].Value;
Run Code Online (Sandbox Code Playgroud)

int32,其范围是-2,147,483,647 到 2,147,483,648(或 -0x7FFFFFFF 到 0x80000000)

快看

因此,只要GROUP_TYPE_SECURITY_ENABLED设置了和任何其他仲裁标志,数值就会超出 int32 的范围,就会发生溢出。

组类型屏幕

有谁知道如何避免这种溢出以读取正确的值?

c# ldap integer-overflow active-directory active-directory-group

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

为什么这个循环会冻结我的浏览器?

为什么浏览器挂起执行此操作?

for(var i= 9007199254740993;i<9007199254740994;i++) {
    console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

javascript integer-overflow

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

x86汇编:ADD/SUB/INC/DEC没有溢出和分支

在x86 ASM中,在没有分支的情况下添加或减去时是否可以禁止溢出?因此,例如,当从0x01中减去0x02时,它将设置0x00而不是0xFF.

我希望这可能是不可能的,所以我也对这个问题的更受限制的形式的答案感兴趣,其中只增加/减去0x01.我有一个这样的想法(OF是溢出标志):

dec eax
add eax,OF
Run Code Online (Sandbox Code Playgroud)

我不知道其他架构,但对于i386我找不到这个操作码,因为显然标志不能被解释为整数并用于算术运算.我找到了一个可行的解决方案,但仅在未使用较高字节时的最低字节:

dec ax
sub al,ah
xor ah,ah
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,也许一个也适用于更一般的情况?

assembly integer-overflow

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

c中的整数提升

假设我有一台 32 位机器。

我知道在整数提升期间,表达式被转换为:\

  • int 如果原始类型的所有值都可以用 int 表示
  • unsigned 除此以外

你能解释一下下面的表达式会发生什么吗?总的来说,这里的排名是如何工作的?

第一个片段:

si16  x, pt;
si32  speed;
u16 length;
x = (speed*pt)/length;
Run Code Online (Sandbox Code Playgroud)

第二个:

x = pt + length;
Run Code Online (Sandbox Code Playgroud)

编辑:

si16均值signed short(大小 16 位)、si32位均值signed int(大小 32 位)和u16均值unsigned short(大小 16)

我发现以下链接非常清楚地描述了这个问题: 隐式类型转换

具体看Lundin的回答,很有帮助!

c integer-overflow integer-promotion

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

C++ 17中的整数溢出是否"自动"安全?

如果我写这样的代码:

auto n = 2048 * 2048 * 5;
char* buf = new char[n];
Run Code Online (Sandbox Code Playgroud)

那么,auto从C++ 17中的整数溢出中推导类型是否安全?

c++ integer-overflow auto c++17

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

int16溢出导致无限循环

我们知道,int16_t的最大值为32767,因此以下代码将循环:

for (int16_t i = 0; i < 65535; i++) {
  // infinite loop
}
Run Code Online (Sandbox Code Playgroud)

当我更改代码时,它也会循环:

const int32_t t = 65535;
for (int16_t i = 0; i < t; i++) {
  // infinite loop
}
Run Code Online (Sandbox Code Playgroud)

但是当我把它设为uint32_t而不是int32_t时,它实际上会退出:

const uint32_t t = 65535;
for (int16_t i = 0; i < t; i++) {
  // actually exits
}
Run Code Online (Sandbox Code Playgroud)

这是由于它为我做了一些编译技巧吗?我假设我做比较时:

i < t
Run Code Online (Sandbox Code Playgroud)

对于最后一个版本,它会为我自动转换?但我不明白为什么它仍然在最后一个版本中退出...

c++ int integer-overflow

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

在Java中总结两个巨大的长

我写了这个方法,在arrayList中搜索是否有两个数字,它们总和等于变量elem.问题是变量的总和超过了long类型的维数.我怎么写呢?

public static boolean searchSum(ArrayList<Long> array, long elem) {
   int left = 0, right = array.size()-1;
   while (left<right) {
     long n1=Long.valueOf(array.get(left));
     long n2=Long.valueOf(array.get(right));
     if ((n1+n2)==elem) return true;
     else if ((n1+n2)<elem) left++;
     else right--;
   }
   return false;
 }
Run Code Online (Sandbox Code Playgroud)

java integer integer-overflow biginteger long-integer

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

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

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

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
查看次数

如何设置一个整数的最小/最大值,其中`++`和` - `和一般数学服从你设置的限制,在c ++中?

if我想知道一个用于设置整数限制的简洁方法,而不是在我的代码中丢失大量的语句,当迭代超过这些限制时,它仍然会包装它的值.

所以,例如,

int i(9998);
setMinMax(i,-27315, 10000); // Absolute Zero - Boiling Point of water
i++; // ==  9999
i++; // ==  10000
i++; // == -27315
Run Code Online (Sandbox Code Playgroud)

如果最小 - 最大值可以是动态的,那将是理想的.我不介意制作新类型或运算符重载.我只是想避免做这样的事情:

int i = foo();
int j = bar();
int min(-27315);
int max(10000);
i += j;
     if (i==min-1) {i=max}
else if (i==max+1) {i=min}
else if (i>max) {i=min+(i-max)}
// more stupid code
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ integer operator-overloading integer-overflow

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

如何保证 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
查看次数