本文小编为大家详细介绍“C++中如何实现int类型按字节打印输出”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中如何实现int类型按字节打印输出”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
代码如下:
#include<iostream> using namespace std; int main() { int i = 128; cout << sizeof(int) << endl; unsigned char* cc = (unsigned char*)&i; for (int j = 0; j < 4; j++) printf("cc: %p \t *cc: %x\n", cc + j, *(cc + j)); system("pause"); return 0; }
输出:
以上是正确代码
以下对代码做改变
unsigned char* cc = (unsigned char*)&i; 改为 char* cc = ( char*)&i; //代码如下: #include<iostream> using namespace std; int main() { int i = 128; cout << sizeof(int) << endl; char* cc = ( char*)&i; for (int j = 0; j < 4; j++) printf("cc: %p \t *cc: %x\n", cc + j, *(cc + j)); system("pause"); return 0;
输出:
输出为什么是ffffff80呢?
char类型是有符号字符型变量还是无符号字符型变量,要看编译器是怎么定义的,不能想当然。char变量为一个字节,8bit,sighed char表示的范围是-128~127,(-128在内存中二进制表示为1000 0000,127在内存中二进制表示为0111 1111),unsighed char表示的范围是0~255.
给 i 赋值128,十六进制0x80,二进制1000 0000,相当于是给char变量赋值-128.
printf()函数的参数%x其含义为Unsigned hexadecimal integer;即输出一个十六进制的整型,而在代码中,%x对应的是char类型,所以此时printf()函数会将char类型隐式转换为int类型。
对于int类型的对象,其值为-128,则其对应的内存值是0xFFFFFF80
所以,在printf()函数中,char类型隐式转换成int类型后,输出就会变成4字节的0xFFFFFF80
读到这里,这篇“C++中如何实现int类型按字节打印输出”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。