1. 下列程序段的输出结果是______。
int a=1;
long b=a*0x12345678;
printf("%x\n", b);
C语言求助 答案我已经知道了,求解释。为什么int变成long型就这样了?
答案:4 悬赏:80 手机版
解决时间 2021-03-14 14:34
- 提问者网友:嗝是迷路的屁
- 2021-03-13 20:08
最佳答案
- 五星知识达人网友:时间的尘埃
- 2021-03-13 20:50
数据类型跟编译器和操作系统,cpu都有关系。
比如,在8086的cpu上,一个整形int就是16位的。
而在arm中,一个int类型,在不改变编译选项的默认情况下个,它跟long是一样的。就是说,默认的int其实就是long int。而short就是 short int。long int在arm中默认编译下来占用4个字节。short int占用2个字节。因为arm是32位的cpu。但是,arm可以使用thumb指令,你可以修改编译选项来完成。就是说,你可以让一个整形值占用16位。
再比如在单片机上,一个int类型就是8位的一个字节。
所以,不管是short ,long ,double,float,char,还是各种结构体,他们的本质是占用的内存长度的大小。如果这么看,你讲对数据类型有更加深入的理解。
比如说,你把一个short强制转换成了long。在内存上,就是尝试去增加两个字节连续的空间。这是安全的。但是你反过来强制转换。把一个long强制转换成short。假如在缩减的两个字节空间内的位有不是0的,那么你讲得到一个错误的转换值,这就是危险的了。
比如,在8086的cpu上,一个整形int就是16位的。
而在arm中,一个int类型,在不改变编译选项的默认情况下个,它跟long是一样的。就是说,默认的int其实就是long int。而short就是 short int。long int在arm中默认编译下来占用4个字节。short int占用2个字节。因为arm是32位的cpu。但是,arm可以使用thumb指令,你可以修改编译选项来完成。就是说,你可以让一个整形值占用16位。
再比如在单片机上,一个int类型就是8位的一个字节。
所以,不管是short ,long ,double,float,char,还是各种结构体,他们的本质是占用的内存长度的大小。如果这么看,你讲对数据类型有更加深入的理解。
比如说,你把一个short强制转换成了long。在内存上,就是尝试去增加两个字节连续的空间。这是安全的。但是你反过来强制转换。把一个long强制转换成short。假如在缩减的两个字节空间内的位有不是0的,那么你讲得到一个错误的转换值,这就是危险的了。
全部回答
- 1楼网友:不想翻身的咸鱼
- 2021-03-14 00:59
强制类型转换
- 2楼网友:封刀令
- 2021-03-13 23:40
输出时按%x输出,即输出16进制数。
- 3楼网友:神的生死簿
- 2021-03-13 22:03
不知道你有什么疑问,十六进制12345678乘1,再转成十六进制输出,不还是12345678么
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯