C++浮点数的取整显示

        //双精度double的二进制小数,使用64 bit存储
	//其中 1位符号位,11位阶码位,52位小数位

	//10进制的0.6写成二进制为(-1)^0 * 2^0 * 0.10011001100110011001100110011001100110011001100110011  无限循环 
	//(-1)^0 * 2^-1 * 1.0011001100110011001100110011001100110011001100110011
	//(-1)^0 * 2^-1 * 0.0011001100110011001100110011001100110011001100110011	
	//下面介绍一下移码:移码(又叫增码),补码的符号位取反 再减 1 就是移码了 
	//浮点数的阶码用的就是移码。
	//-1的补码是111 1111 1111,取反是011 1111 1111,再减 1 就是 011 1111 1110 
	//所以符号位为 0 , 阶码位为 011 1111 1110 , 
	//小数位为 0011001100110011001100110011001100110011001100110011
	//写在一块就是 0    011 1111 1110    0011001100110011001100110011001100110011001100110011

	//3fe3333333333333 转换成2进制如下: 
	//0011 1111   1110 0011  0011 0011  0011 0011  0011 0011  0011 0011  0011 0011  0011 0011

	double num = 0.6;
	cout <<"输出num的值为:"<< num << endl;
	cout <<"num的16进制为:"<< hex << (long long int&)num << endl << endl;

	long long int num_a = 0x3fe3333333333333;
	long long int num_b = 0x3fe33333ffffffff;
	long long int num_c = 0x3fe3333388888888;
	cout << "num_a:" << (double&)num_a << endl << "num_b:" << (double&)num_b << endl << "num_c:" << (double&)num_c << endl;
	cout << "num_a == num_b 的值为:" << (num_a == num_b) << endl;
	cout << "num_a == num_c 的值为:" << (num_a == num_c) << endl;
	cout << "num_b == num_c 的值为:" << (num_b == num_c) << endl << endl;

猜你喜欢

转载自blog.csdn.net/yesyes120/article/details/79830685