其他分享
首页 > 其他分享> > c – Hex文字的-Wsign-conversion警告

c – Hex文字的-Wsign-conversion警告

作者:互联网

我最近遇到了以下问题.因为它有点棘手,所以我把它作为未来人们的问答对.

根据这些问题(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-3,c,literals
来源: https://codeday.me/bug/20190830/1769319.html