[关闭]
@Purpose 2016-08-17T10:11:50.000000Z 字数 558 阅读 993

强制转化的问题

蛋协


补充一下数据类型的范围

int -2147483648~+2147483648
unsigned[int] 0~4294967295
short [int] -32768~32768
unsigned short[int] 0~65535
Long int -2147483648~+2147483648
unsigned [int] 0~4294967295
[signed] char -128~+127
unsigned char 0~255
float 3.4 x 10^(-38)~ 3.4 x 10^(+38)
double 1.7 x 10^(-308)~ 1.7 x10^(+308)
long double 1.7 x 10^(-308)~ 1.7 x 10^(+308)

char-1的补码为0b11111111
a=b 使得b也为0b11111111
但是b得数据类型为 unsigned char
不同的数据类型告诉系统
如何去解析变量在内存中粗村的数值
而比较ab的大小已经是一种不规范的行为了
但是在内存中它们的数据是一样的
a=b
只是我们输出的时候没法解析
两个不同数据类型的变量进行比较的时候
要注意两个变量的表示范围
虽然输出一个是-1一个是255
但是在内存中两者是一样的均为0b11111111
进而执行if(a == b)是成立的
C风格的强制类型转换很强大很危险
用不好就有问题

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注