double类型数据 位移操作 .
来源:互联网 发布:python的发展趋势 编辑:程序博客网 时间:2024/06/05 09:33
由于位操作的对象是整型变量,所以你必须利用某种转换让编译器把浮点变量暂时当成整型变量。不过,直接强制转换是不行的:
float f = 12.34;
int i = (int)f; // i最后等于12而不是你想要的结果!
所以,转换必须是“间接”的:
float f = 12.34;
int *p = (int*)&f; // 用指针就OK!
然后,你已经有int指针,要进行位操作完全没问题:
(*p) < < 3; //试试看 :)
对double的位操作没有什么实际的意义。
如楼上所言,你那样是可以实现float的移位,但没有现成的办法很好的支持double(占八个字节)。
而且我想不通楼主为什么要对它进行位操作?
无论是&,~,|,> > , < <,^都没有什么实际的意义。
因为浮点数(包括float,double)的数据一定的位数表示阶码,
一部分表地尾数,首位表示符号位,其表示的值本身是通过
运算得出的,而非像整数一样,可以从十六进制看出点什么,
如果浮点数发生位操作,后果不堪设想。
试想,如果 double i = 1;
i < < 1;(如果支持的话),你算让它等于多少?
(二进制表示为:0000000000000000000000000000000000000000000000001111000000111111)
浮点数 2(二进制表示为)
0000000000000000000000000000000000000000000000000000000001000000
还是1.3718659e+303(这个数的二进制是) (0000000000000000000000000000000000000000000000011110000001111110)
看了这个例子,你还想位操作吗?
关于double占8个字节的问题,解决方案一:
使用union:
union X{
double d;
int arr[2];
};
但应用很受限制,因为实际上double被分成两截。
方案二:
使用C99标准提供的标准int数据类型:int64_t或uint64_t:
double d = 12.34;
int64_t *pi64 = (int64_t*)&d;
uint64_t *pu64 = (uint64_t*)&d;
C99保证所有符合标准的平台如果实现了 int64_t、uint64_t,则它们一定是64位的整型。
其它的,你看着办吧。
- double类型数据 位移操作
- double类型数据 位移操作 .
- double类型数据范围
- double类型数据初始化
- 显示double类型的数据
- fscanf读取double类型数据
- Java double类型数据四则运算
- 位移操作
- double类型数据做加和操作时会丢失精度问题处理
- java中double类型数据加减操作精度丢失问题及解决方法
- Double与Double类型数据相除保留小数工具
- C#操作SQL float类型数据,在C#中用double类型就OK了,C#数据类型和SQL数据类型对照
- 控制double,float类型数据的精度
- 时间和double类型数据的格式化
- Java中的double类型数据存储探析
- 关于STLsort double类型数据排序
- double类型数据的精确运算
- 比较两个Double类型的数据
- datagridview 获取当前行
- hdoj 4287 Intelligent IME 字典树
- Fedora core 6 Linux使用NFS挂装远程文件系统实现目录共享
- 监控WebLogic9/10的项目部署到Tomcat报[Unsupported protocol: t3]异常的解决办法
- 使用JMX访问WebLogic Server MBean(监控应用服务器系列文章)
- double类型数据 位移操作 .
- JDK5和JDK6对JMX的ObjectName模式支持的不同(监控应用服务器系列文章)
- 使用JMX监控Tomcat(监控应用服务器系列文章)
- 监控WebSphere 6.1以及WAS6.1生成和配置安全证书的方法
- 监控Tomcat解决方案(监控应用服务器系列文章)
- 监控WebSphere解决方案(监控应用服务器系列文章)
- 监控WebLogic 8.x的解决方案(监控应用服务器系列文章三)
- C++:复制构造函数在什么时候被调用?
- 监控WebLogic 9.x和10.x解决方案(监控应用服务器系列文章四)