大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
网络上现在能搜到的其他答案都是针对于类似
char a = ‘2’;
int b = a-‘0’;
//value of b is 2
这样的问题。
那么如果问题是
char a = -2;
int b = a;
//value of b is ?
这样的问题呢?
一般平时写代码的同学都会确定b的值是-2,但实际上b的值和编译器有关,如果直接当做-2用,很有可能让你的程序出现莫名其妙的错误。
因为在一些编译器下会进行符号位扩展,直接保留符号,将a看作signed char, b的值会是-2,
但是在一些编译器下,直接屏蔽了符号位扩展,将a先转换成unsigned char,然后再转换成int,得到的b值为254。
这时候如果我们还想拿到值为-2的int型变量,而且要保证在不同的编译环境下都可以得到值相同的变量,要怎么办呢?
一个很简单的解决方案就是在类型装换后手动加入判断
char a = -2;
…
int b = a;
if(b > 127)
b -= 256;
经过这样处理,0~127 的范围内,char 和 int 是通用的,-1~-128 在转换成int时如果被去掉了符号位扩展,可以通过减去256来还原成有符号数。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188983.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...