使用各种格式说明符打印short int
发布时间:2020-12-16 09:42:27 所属栏目:百科 来源:网络整理
导读:请看一下这段代码: #include stdio.hint main(void){short s = -1;printf("sizeof(short) = %lun",sizeof(short));printf("sizeof(int) = %lun",sizeof(int));printf("sizeof(long) = %lun",sizeof(long));printf("s = %hdn",s);printf("s = %dn",s);p
请看一下这段代码:
#include <stdio.h> int main(void) { short s = -1; printf("sizeof(short) = %lun",sizeof(short)); printf("sizeof(int) = %lun",sizeof(int)); printf("sizeof(long) = %lun",sizeof(long)); printf("s = %hdn",s); printf("s = %dn",s); printf("s = %ldn",s); return 0; } 它给出了输出: sizeof(short) = 2 sizeof(int) = 4 sizeof(long) = 8 s = -1 s = -1 s = 4294967295 在最后一行为什么s = 4294967295而不是s = -1,因为通过this问题,我开始知道在C中,当变量被提升时,它的值保持不变. 解决方法
s被提升为int,这是一个4字节类型.所有3例都发生了这种情况.在前两个中,int是printf()所期望的,因为格式说明符用于将作为int传递的类型.但是在最后一种情况下,您给出了一个格式说明符,它需要一个8字节的类型.
这是在调用未定义的行为. 在您的情况下,它似乎在值的高字节中读取零,实际上零扩展到64位已经符号扩展到32位的值.但是,您无法依赖于执行此操作的结果 – 它可能是读取内存或未始终初始化的寄存器.明天可能会有所不同. 参数的提升不依赖于格式字符串 – 您必须始终确保为您指定的格式传递正确的参数.因此int不会被提升为很长的.你需要自己转换它. 一个聪明的编译器应该给你一个警告. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c – COLOR_ATTACHMENT – 如何在Framebuffer对象中渲染多个
- ruby-on-rails – rails机架保护用法,错误“你需要在* Rack
- sqlite admin提示cannot perform this operation on a clos
- win10安装jenkins忘记密码的解决方法
- swift3 – 设置Alamofire自定义目标文件名,而不是在Swift 3
- oracle 11g 初次配置说明
- 30天从0开始学习Swift
- Erlang的Xml解析
- Flex ms:AdvancedDataGrid汇总统计方法
- c – 无法使用curl – undefined引用在Linux中编译