栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言数据类型形式转换与隐式转换,以及宏定义

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言数据类型形式转换与隐式转换,以及宏定义

//宏定义:宏定义只能做一级传参,凡是有#或者##的地方,不在进行替换

//param:#
//
#define INT_MAX 0x7fffffff;
#define A 3
#define _Fun(x,y) (int)(x##e##y)
#define Str(x) (#x)
#define FUN(x,y) _Fun(x,y)
#define SUM(x,y) (x+y)

int main()
{
char* TestChar = Str(hello);
printf(“num value is:%sn”, TestChar);
//char* num = Fun(“as”, “cd”);
//printf(“num value is:%sn”,num);
char* testchar2 = Str(INT_MAX);
printf(“num value is:%sn”, testchar2);
int Testnum2 = FUN(A,A);
printf(“num value is:%dn”, Testnum2);
Testnum2 = SUM(A, A);//如果不是#或者##,宏会继续展开
printf(“num value is:%dn”, Testnum2);

int TestNumber = -1;

if (TestNumber < sizeof(int))
{
    printf("Test Numer < sizeof(int)");
}
else
{
    printf(" invalid Test Numer < sizeof(int)%dn",TestNumber);
    printf(" invalid Test Numer < sizeof(int)%lun", TestNumber);
    printf(" invalid Test Numer < sizeof(int)%xn", TestNumber);
    printf(" invalid Test Numer < sizeof(int)%Xn", TestNumber);
   
}

float num0 = 0.0;
int num1 = 64400;

num0 = (float)num1 / 150;//显式转换
//num0 = num1 / 150;//隐式转换
//num0 = num1 / 150。0;//隐式转换规则:值域较小的转换成值域较大的
printf("float number is %fn", num0);
//赋值表达式中,左边类型与右边类型不同也会进行隐式转换,
int num2 = 0;
float num3 = 2.5f;

num2 = num3;//赋值表达式会吧左边强制转换成右边,出现截断

printf("打印int %dn", num2);
printf("打印Float %fn", (float)num2);

float PI = 3.14159;
int s1, r = 5;
double s2,s3;
s1 = r * r * PI;
s2 = (float)r * (float)r * PI;
s3 = (double)r * (double)r * (double)PI;
printf("s1=%d, s2=%lf,s3 = %lfn", s1, s2,s3);

int sum = 103;  //总数
int count = 7;  //数目
double average;  //平均数
average = (double)sum / count;
average = sum / count;//这里是除法,两个整型相除,不考虑溢出,
average = sum * count;//这里必须要要提型在计算,否则会有可能出现溢出
average =(double)sum * count;//这里必须要要提型在计算,否则会有可能出现溢出
//count = 7.0;
average = sum / (double)count;
printf("Average is %lf!n", average);


//强制转换是临时的。
double total = 400.8;  //总价
 count = 5;  //数目
double unit;  //单价
int total_int = (int)total;
unit = total / count;
printf("total=%lf, total_int=%d, unit=%lfn", total, total_int, unit);
int a = 98;
printf(" ASCII %cn", (char)a);
printf(" ASCII %dn", (char)a);
a = 270;
//高级别的类型转换成低级别的类型,有可能会出现溢出,如果出现溢出的话,就把高位舍弃,保留地位
char tempChar = a;
printf(" ASCII %cn", (char)a);
printf(" ASCII %dn", (char)a);

printf("..... ASCII %cn", tempChar);
printf(".... ASCII %dn", tempChar);

//有符号整型,最高位表示的是符号位,如果转成无符号整型,强制
int bb = -1;
unsigned int cc = bb;
printf(" unsigned value %un", cc);
printf(" unsigned value %xn", cc);

unsigned int dd = 4294967295;
int ee = dd;
printf(" unsigned value %dn", ee);
printf(" unsigned value %un", ee);

short ff = -1;
printf(" unsigned value %dn", ff);
printf(" unsigned value %un", ff);

unsigned short gg = 65535;
printf(" unsigned value %dn", gg);
printf(" unsigned value %un", gg);

//宏定义中遇到#与##是什么意思。遇到#表示将后面的字符作为字符串处理
//##de的意思表示连接符。那么#param##param是什么意思?

运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312172.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号