gpt4 book ai didi

c++ - -十六进制文字的 Wsign 转换警告

转载 作者:太空狗 更新时间:2023-10-29 20:40:12 25 4
gpt4 key购买 nike

我最近遇到了以下问题。由于它有些棘手,我将其作为 future 人们的问答对。

根据这些问题(Unsigned hexadecimal constant in C?C interpretation of hexadecimal long integer literal "L"),文字适合第一个可以表示它们的数据类型。在这种情况下,列表应该是:

int
unsigned int
long int
unsigned long int
long long int
unsigned long long int

此行为来自 C 标准 6.4.4.1。但是,如果您在启用 -Wsign-conversion 的情况下编写以下代码(我使用 C++):

int32_t mask = 0xFF00FF00;

. . .然后得到:

<file>:<line>:17: warning: conversion of unsigned constant value to negative integer [-Wsign-conversion]
int32_t mask = 0xFF00FF00;
^

我觉得这很奇怪,因为 0xFF00FF00 是整数 -16,711,936 的二进制表示,它很容易适合 int。有什么问题?

最佳答案

问题是 0xFF00FF00 未被编译器视为否定。它无法知道您的意思是最高位是符号位。

相反,文字被视为4,278,255,360,这不符合整数的最大值2,147,483,647。因此,编译器将列表向下移动一级,选择 unsigned int,从而触发警告。

关于c++ - -十六进制文字的 Wsign 转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com