C++查缺补漏之变量和基本类型
基本内置类型
123456 | 01110001 |
123457 | 10101001 |
123458 | 10100100 |
#include <iostream> #include <iomanip> #include <stdio.h> using namespace std; int main(int argc, char const *argv[]) { unsigned int number = 16843009;//二进制为<span style="font-family: 'Comic Sans MS';">00000001</span><span style="font-family: 'Comic Sans MS';">00000001</span><span style="font-family: 'Comic Sans MS';">00000001</span><span style="font-family: 'Comic Sans MS';">00000001</span><span style="font-family: 'Comic Sans MS';"> </span> unsigned int * pNumber = &number; cout<<reinterpret_cast<int>(pNumber)<<endl;//打印指针地址 cout<<*pNumber<<endl;//unsigned类型时的值 unsigned char * ptrChar = reinterpret_cast<unsigned char *>(pNumber);//unsigned int * 转为 unsigned char * cout<<static_cast<int>(*ptrChar)<<endl;//unsigned char类型以int类型输出 ptrChar++; cout<<static_cast<int>(*ptrChar)<<endl; ptrChar++; cout<<static_cast<int>(*ptrChar)<<endl; ptrChar++; cout<<static_cast<int>(*ptrChar)<<endl; while(1); return 0; }最后输出结果为:
char ch =-1; printf("%d\n",ch);如果打印的是-1,那么表明是signed类型的
类型float大小为4字节,即32位,内存中的存储方式如下:
符号位(1 bit) |
指数(8 bit) |
尾数(23 bit) |
类型double大小为8字节,即64位,内存布局如下:
符号位(1bit) |
指数(11 bit) |
尾数(52 bit) |
对于float类型来书8位的指数取值范围为:-2^7~2^7+1(-127~128)
- 负指数代表着浮点数能表示的绝对值最小的数
- 正指数表示了浮点数能表示绝对值最大的数
- float类型的尾数为2^23(8388608),长度为7为,但是又不满七位
- double类型尾数为2^52(4503599627370496),长度为16,但是又不满16
#include <iostream> #include <iomanip> #include <stdio.h> using namespace std; int main(int argc, char const *argv[]) { float f1 = 1.123456789123456789; double d1 = 1.123456789123456789; cout<<setprecision(20)<<"float:"<<f1<<endl; cout<<setprecision(20)<<"double:"<<d1<<endl; while(1); return 0; }可得到输出结果为:
我们可以明显的看到float从第7位(为什么不是第六位呢?因为8388608)有效数字开始就开始不准确了
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。