我正在尝试读取组 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
为什么浏览器挂起执行此操作?
for(var i= 9007199254740993;i<9007199254740994;i++) {
console.log(i);
}
Run Code Online (Sandbox Code Playgroud) 在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)
有没有更好的方法来做到这一点,也许一个也适用于更一般的情况?
假设我有一台 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的回答,很有帮助!
如果我写这样的代码:
auto n = 2048 * 2048 * 5;
char* buf = new char[n];
Run Code Online (Sandbox Code Playgroud)
那么,auto从C++ 17中的整数溢出中推导类型是否安全?
我们知道,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)
对于最后一个版本,它会为我自动转换?但我不明白为什么它仍然在最后一个版本中退出...
我写了这个方法,在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) 我们有两个无符号计数器,我们需要比较它们以检查一些错误条件:
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)
问题是,a并b会溢出一些日子.如果a溢出,它仍然可以.但如果b溢出,那将是一种误报.如何使这个检查防弹?
我知道制作a并b 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) 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)
谢谢.
我可以描述这个“圆形”六边形网格的尺寸..
..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
integer-overflow ×10
c++ ×4
c ×2
integer ×2
assembly ×1
auto ×1
biginteger ×1
c# ×1
c++17 ×1
constants ×1
int ×1
java ×1
javascript ×1
ldap ×1
long-integer ×1
rust ×1