今天研究了一下c语言中赋值语句的简单机理。
例如
unsigned char ch= -127;
打印出ch的值为:129.
我对该值的理解是这样的:
在编译器编译这句话时,将-127这个立即数转换为对应的补码:(二进制)10000001
【过程:-127--符号位+原码-->11111111----符号位不变,源码取反加1--->10000001】
编译器同时将该补码保存在符号ch对应的字节存储空间中。当打印该变量时,因为是unsigned char类型,于是将10000001解读成一个无符号的数字,即129。
同理,char ch=255;打印ch时值为-1。
例如
unsigned char ch= -127;
打印出ch的值为:129.
我对该值的理解是这样的:
在编译器编译这句话时,将-127这个立即数转换为对应的补码:(二进制)10000001
【过程:-127--符号位+原码-->11111111----符号位不变,源码取反加1--->10000001】
编译器同时将该补码保存在符号ch对应的字节存储空间中。当打印该变量时,因为是unsigned char类型,于是将10000001解读成一个无符号的数字,即129。
同理,char ch=255;打印ch时值为-1。