编译警告是怎么回事

时间:2022-03-02 19:37:36
implicit arithmetic conversion from 'int' to 'unsigned short'

使用codewarrior编程时出现如上警告,请问是怎么回事呢?

10 个解决方案

#1


同一变量的声明和定义两处语句没有统一,把unsigned去掉看行不? 如果不行,贴代码看下~~

#2


编译器提醒你把int赋给一个无符号short会有数据精度损失。

#3


无法把int 型的变量转换为unsigned int型,应该是=左边和右边的类型不一致

#4


强制转换吧。

#5


强制转换,或者变量类型统一。
难道是for循环用的int i?

#6


int i=999999999999;
unsigned short u = i;
这样就会报这个警告,如果i的值不大,10、20的,这样用也没事,要是i值很大,如上,u的值就是%过最大的unsigned short值的结果.但是你确实是想这样用,你知道这么用的风险,就告诉编译器

unsigned short u = (unsigned short)i;

#7


int 到short 可能出现精度丢失。原则上不允许使用小的short类型去接口的int类型的值。

#8


int i=65536+2;
unsigned short us;
us = i;
us = (unsigned short)(i&0xFFFFu); //2

#9


有int类型转换成unsigned short类型,数据范围缩小了,那么你的数据可能也被截断了,所以编译器提出警告让你注意这个地方。如果反过来就不会有警告了,类型有一个隐式提升的过程。建议这种情况,如果是必须的那就做强制类型转换。

#10


你应该是把一个int赋值给一个unsigned short了。。加上强制类型转换就不会有警告了。。

#1


同一变量的声明和定义两处语句没有统一,把unsigned去掉看行不? 如果不行,贴代码看下~~

#2


编译器提醒你把int赋给一个无符号short会有数据精度损失。

#3


无法把int 型的变量转换为unsigned int型,应该是=左边和右边的类型不一致

#4


强制转换吧。

#5


强制转换,或者变量类型统一。
难道是for循环用的int i?

#6


int i=999999999999;
unsigned short u = i;
这样就会报这个警告,如果i的值不大,10、20的,这样用也没事,要是i值很大,如上,u的值就是%过最大的unsigned short值的结果.但是你确实是想这样用,你知道这么用的风险,就告诉编译器

unsigned short u = (unsigned short)i;

#7


int 到short 可能出现精度丢失。原则上不允许使用小的short类型去接口的int类型的值。

#8


int i=65536+2;
unsigned short us;
us = i;
us = (unsigned short)(i&0xFFFFu); //2

#9


有int类型转换成unsigned short类型,数据范围缩小了,那么你的数据可能也被截断了,所以编译器提出警告让你注意这个地方。如果反过来就不会有警告了,类型有一个隐式提升的过程。建议这种情况,如果是必须的那就做强制类型转换。

#10


你应该是把一个int赋值给一个unsigned short了。。加上强制类型转换就不会有警告了。。