标签: unsigned-integer

避免由无符号整数除法签名

我在执行以下代码时遇到了这个问题:

int average = std::accumulate(vi.begin(), vi.end(), 0) / vi.size();
Run Code Online (Sandbox Code Playgroud)

没有intvi.size()输出进行强制转换是垃圾,因为size()返回一个无符号整数。

如果我没有在 google 上搜索 vector 的参考资料,我永远不会想到这一点。有没有办法避免这个陷阱?使用-Walland -pedantic,gcc 似乎没有给出关于这种划分的任何警告。

c++ gcc type-conversion unsigned-integer

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

在 NASM 中声明变量

我只是在学习 NASM,我正在努力解决这个问题。你如何在 NASM 中声明变量?例如,您将如何unsigned int i在 NASM 中声明?谢谢

nasm unsigned-integer

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

现代编译器是否在for循环中优化unsigned int的使用?

请考虑以下代码:

for(unsigned i = 0; i < counter1; i++) {
    for(unsigned j = 0; j < counter2; j++) {
        // some code here
    }
}
Run Code Online (Sandbox Code Playgroud)

使用unsigned int而不仅仅是int在这种情况下有什么好处吗?现代编译器会以某种方式对其进行优化,还是唯一的好处就是更大的尺寸unsigned int

c c++ compilation unsigned-integer

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

编译器如何将unsigned int打印为signed int?

我想弄清楚为什么以下代码:

{
  unsigned int a = 10;
  a = ~a;
  printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)

a00001010开始,并且在NOT opertaion之后,将变换

进入11110101.

当一个人试图打印a为有符号整数时,会发生什么

打印结果是-11

我以为我最终会看到-5可能(根据二进制表示),但不是-11.

我很乐意对此事作出澄清.

c printing unsigned-integer

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

以十六进制和十进制 C 打印 unsigned short int

我一直在尝试unsigned short int用 C打印值,但没有运气。据我所知,它是一个 16 位值,所以我尝试了几种不同的方法来将这 2 个字节打印在一起,但是我只能在逐字节打印时正确打印它。

请注意,我想以十进制和十六进制格式打印这 16 位,例如00 01as 1,另一个示例是:00 ffas 255

我有这个结构:

struct arphdr {
   unsigned short int ar_hrd;
   unsigned short int ar_pro;
   unsigned char ar_hln;
   unsigned char ar_pln;
   unsigned short int ar_op;
   // I'm commenting the following part because I won't need it now
   // for the explanation
   /* unsigned char __ar_sha[ETH_ALEN];
   unsigned char __ar_sip[4];
   unsigned char __ar_tha[ETH_ALEN];
   unsigned char __ar_tip[4]; */ 
};
Run Code Online (Sandbox Code Playgroud)

而这个功能:

void print_ARP_msg(struct arphdr …
Run Code Online (Sandbox Code Playgroud)

c printf unsigned-integer

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

如何在 C 中比较无符号整数和文字?

我正在做以下比较:

uint32_t value = 1000;

if(value < 100)
{
  // do something
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,什么 get 被投射到什么?“值”是否被强制转换为整数?100 是否被转换为整数或无符号整数?

c unsigned-integer

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

为什么 numeric_limits&lt;uint16_t&gt;::max() 不等于 -1?

#include <iostream>
#include <cstdint>

using namespace std;

static_assert(-1 == numeric_limits<uint64_t>::max()); // ok
static_assert(-1 == numeric_limits<uint32_t>::max()); // ok
static_assert(-1 == numeric_limits<uint16_t>::max()); // error

int main()
{
    cout << numeric_limits<uint16_t>::max() << endl;
    cout << uint16_t(-1) << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

65535
65535
Run Code Online (Sandbox Code Playgroud)

为什么 numeric_limits<uint16_t>::max() 不等于-1?

更新:

根据cppref

类似地,USHRT_MAX 可能不是无符号类型:它的类型可能是 int。

c++ standards numeric compile-time-constant unsigned-integer

3
推荐指数
2
解决办法
4144
查看次数

为什么在执行int/unsigned int除法时使用'divl'

我在X86中测试了这段代码.

void func()
{
  int a, b;
  unsigned int c, d;
  int ret;

  ret = a / b;  // This line use idivl, expected
  ret = c / d;  // this line use idivl, expected
  ret = a / c;  // this line use divl..., surprised 
  ret = c / a;  // this line use divl..., supriised
  ret = a * c;  // this line use imull, expected
}
Run Code Online (Sandbox Code Playgroud)

我在这里粘贴汇编代码:

func:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $36, %esp
    movl …
Run Code Online (Sandbox Code Playgroud)

c c++ x86 unsigned-integer

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

for循环中奇怪的std :: string :: size()

如果我input.size() - 1用作for循环条件,程序将打印"进入循环" .

std::string input;
input = {""};
int i = 0;
for (; i < input.size() - 1; ++i)
{
    cout << "Entered the loop" << endl;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将值传递input.size() -1给整数(checksize):

std::string input;
input = {""};
int checksize = input.size() - 1;
int i = 0;
for (; i < checksize; ++i)
{
    cout << "Entered the loop" << endl;
}
Run Code Online (Sandbox Code Playgroud)

然后程序将不会进入循环并且不会打印"进入循环"

我想知道为什么会这样?看来这两段代码对我来说是一样的.

c++ size unsigned for-loop unsigned-integer

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

在C中为unsigned int分配一个大数字

我试图为unsigned int分配一个数字,但它会导致错误.我想只要数字介于0和2 ^ 32之间,它应该可以工作.这是我的代码.

unsigned int number = 4026658824;
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误.

错误:根据1999 ISO C标准不断推广

c unsigned-integer

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