gpt4 book ai didi

从 ‘unsigned char’ 转换为 ‘int’ 可能会改变它的值

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:03 24 4
gpt4 key购买 nike

如果没有显式(=丑陋的)转换,您将如何删除 gcc -Wconversion 对以下代码产生的警告:

int main()
{
int val;
unsigned char c1 = (val % 65536) / 256;
unsigned char c2 = (val % 65536) % 256;
}

有没有办法告诉编译器显然转换是在 (% 65536)/256% 256 期间隐式完成的

供引用

$ gcc -Wconversion w.c
w.c: In function ‘main’:
w.c:4:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
w.c:5:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]

最佳答案

使用静态转换(或将结果转换为无符号字符)

int main()
{
int val;
unsigned char c1 = (unsigned char)((val % 65536) / 256);
unsigned char c2 = (unsigned char)(val % 256);
}

这将减少警告,因为它实际上是在告诉编译器,“等等,我是故意的”。

如果您不打算真正使用带符号的 VALUES,那么您应该从:

unsigned int val;

代替:

int val;

即使这样做,您也需要将 unsigned int 转换为 unsigned char,因为编译器最终仍会认为您并不是要按照您所做的方式向下转换。

关于从 ‘unsigned char’ 转换为 ‘int’ 可能会改变它的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22041983/

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