操作字符
----表达式求值----隐式类型之整型提升
今天学到的整形提升,在任何发生表达式里都会发生的整型提升。
因为CPU内整型运算器(ALU)的操作数的字节长度 ,通用的寄存器长度是int,所以会发生提升数据类型到int(整型)
char(一字节)、short(两字节)
比如 char a=1;
像这些都是表达式+a、-a(单目操作符)、a==1也算表达式求值,所以会提升数据类型(除了!a逻辑取反和<>)
有符号的数据类型char
整型提升还分为 负数整型提升 和 正数整型提升
比如 负数整型提升
char a=-3;
(原码)10000011
(反码)11111100(原码符号位不变,其他相反)
(补码)11111101(反码+1)
-a
(原码)00000000000000000000000000000011
(补码)00000000000000000000000000000011(正数的补码就是原码)
正数整型提升
char a=3;
(原码)00000011
(补码)00000011(正数的补码就是原码)
接下来就是计算
鹏哥这道实例超级经典
我的理解因为sizeof计算的是b这个变量的数据内存,所以这个变量空间不会改变
而第二个是一个表达式整型提升的体现
鹏哥这道实例很经典
char
a
=
0xb6
;
short
b
=
0xb600
;
int
c
=
0xb6000000
;
if
(
a
==
0xb6
)
printf
(
"a"
);
if
(
b
==
0xb600
)
printf
(
"b"
);
if
(
c
==
0xb6000000
)
printf
(
"c"
);
