关于由于赋值导致字节的截断、字节扩展及数据类型的提升:
一、字节截断:
int----->char 当一个字节(8位)放不下时,出现截断,直接取(最后一个字节)最后面面8位。 例如:100000000=256将256放在一个字符变量时,他就会截取后面的8位,放在字符变量中的那一个字节中,将最高位“1”,抛弃了。 所以以%d输出时,结果为0.
例如:
#include
int main(void)
{
int a = 256;
char c;
c = a;
printf("c:=%c
",c);
return 0;
}
二、字节扩展:
char<----->int (短字节最高位是什么,之后长字节的3个字节就补什么)
单精度浮点型:float
%f:默认以double类型打印的
%.nf:小数点之后保留n位
%f:小数点之后保留6位,
float a=3.2 :意思:开辟一个大小为4字节、名称叫a的内存空间,并将3.2存入该空间
在赋值时,要输入的数后面加上f,以保证输入的数为4字节。
(因为一个常量小数占8个字节,默认是double型。)
例如:float a=3.5f;
float 开辟内存空间时,开辟4字节大小
双精度浮点型:double
double b=8.8 意思:开辟一个大小为8字节、名称叫b的内存空间,并将8.8存入该空间
double 开辟空间时占8字节。
三、数据类型提升
X
短字节向长字节看齐,
有符号向无符号看齐,
整数向浮点型看齐,
单精度向双精度看齐,
证明:短字节向长字节看齐 证明:有符号向无符号看齐:运算结果最后是无符号数。
#include <stdio.h>
#include <stdlib.h>
int main ()
{
unsigned int a =5;
int b=-20;
((a+b)>0)?printf("*"):printf("#");
return 0;
}