C语言实现float类型到int类型的转化(位运算基础知识)
/* 在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序。
********************
操作符 * 作用
********************
& * 位与 1 & 1 = 1; 1 & 0 = 0; 0 & 0 = 0;
| * 位或 1 | 1 = 1; 1 | 0 = 1; 0 | 0 = 0;
^ * 位异或 1 ^ 1 = 0; 0 ^ 1 = 1; 0 ^ 0 = 0;
! * 位反 ! 1 = 0; ! 0 = 1;
>> * 右移 01011 >> 1 = 0101;
<< * 左移 01011 << 1 = 1011;
********************
按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符型和整数型变量以及它们的变体, 对其它数据类型不适用。
我们要注意区分位运算和逻辑运算。
*/
//我们先来做一些练习熟悉位运算
/*由于不同位的计算机系统和编译器存储时字节数会不同,本文所有操作都在64位系统和32位编译器下执行的*/
# include<stdio.h>
void main()
{ int x; //计算整数x的二进制表示中1的个数 printf("请输入一个数\n"); scanf("%d",&x); int count=0; while(x) { count ++; x=x & (x-1); } printf("%d\n",count);
}
下面再来做几个小练习:
void main()
{int i; printf("输入要操作的数i\n"); scanf("%d",&i); i = i >> 1; //去掉最后一位 i = i << 1; //往最后一位加0 i = i << 1;i=i | 1; //往最后一位加1 i = i | 1; //把最后一位变成1 i = i >> 1;i=i << 1; //把最后一位变成0 i = i ^ 1; //最后一位取反 int k; printf("请输入k\n"); scanf("%d",&k); i = i | (1 << (k-1)); //把右数第K位变为1 i = i & ( ~ (1 << (k-1))); //把右数第K位变为0 i = i ^ (1 << (k-1)); //把右数第k位取反 i = i & 0x00000007; //取末尾三位 i = i & (0x7fffffff >> (31-k)); //取末尾k位 i = (i >> (k-1) & 1); //取右数第k位 i = i & (i+1); //把右边连续的1变为0 i = i | (i+1); //把右边第一个0变为1 i = i | (i-1); //把右边连续的0变为1
}
要完成上面的操做方法有很多种,这是我自己想的一些解决办法。
下面我们就用位运算来完成float型到int型的强转。
注:要完成此函数得先理解float型和int型的二进制存储形式。float:1个符号位、8个指数位、23个尾数位
int float_to_int(float f)
{ int *p = (int *)&f; int temp = *p; int sign= -1; //判断符号位 if((temp & 0x80000000) == 0) { sign = 1; } int exp = ((temp >> 23) & ox000000ff) - 127;//求出指数位 int tail = (temp & 0x007fffff) | 0x00800000;//求出尾数位 int res = tail >> (23 - exp); //求出有效数字 return sign * res; //返回整数
}
//针对上面的代码,我们对位运算有加深了印象。位运算的大体操作我们都基本作完了,掌握上面的运算就基本掌握了位运算。
C语言实现float类型到int类型的转化(位运算基础知识)相关推荐
- 【c语言】float强制转换为int类型
<程序设计基础-c语言>杨莉 刘鸿翔 科学出版社 ISBN 978-7-03-032903-5 p36 [例2.10] 强制类型转换 #include<stdio.h> voi ...
- Java object类型转换为int类型
在struts1的action类中设置了String类型的变量,int类型的变量,把他们放在request中,在jsp页面获取的时候object类型装换位int类型,(Integer)request. ...
- java中long类型转换为int类型
由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一.强制类型转换 [java] l ...
- java把string转换为int_java如何把String类型转换为int类型
在java中,实现String类型转换为int类型的方法有:Integer.parseInt(String)方法.Integer.valueOf(String)方法. 本篇文章就给大家介绍java把S ...
- char类型转int类型
char类型转int类型 代码示例 原理 代码示例 char a = '1';int x = a - '0'; 原理 原理是用的ASCILL码.char类型减去一个char类型的'0'就可以转成int ...
- java把string转int类型_java把String类型转换为int类型的方法
java把String类型转换为int类型的方法 发布时间:2020-08-20 14:32:03 来源:亿速云 阅读:73 作者:小新 这篇文章将为大家详细讲解有关java把String类型转换为i ...
- Date类型转int类型
由于有些mysql数据库中存储的是int类型,所以进行条件筛选时需要进行处理.将需要的日期转换为int类型进行比较. Date类型转int类型: Integer date = Integer.valu ...
- java string 转换 int_java如何把String类型转换为int类型
在java中,实现String类型转换为int类型的方法有:Integer.parseInt(String)方法.Integer.valueOf(String)方法. 本篇文章就给大家介绍java把S ...
- char类型与int类型的转换
在c语言中,char类型与int类型可以转换,如何转换我在此做一个粗略的总结 首先是char转换为int #include <stdio.h> int main() {char a ;a ...
最新文章
- django 限制匿名用户访问以及重定向
- WWW 2021 | Radflow: 可进行数十万节点的多变量时序预测模型
- Elasticsearch Transient与Persistent的区别
- mysql数据库的优缺点
- Maven搭建SpringMVC+Mybatis项目详解【转】
- 2019最新Python爬虫高频率面试题总结(一)
- 华为手机获取状态栏高度是错误的_你的华为手机状态栏有HD图标吗?这又代表着什么?看完你就懂了...
- 4-10:TCP协议之面向字节流和粘包问题
- Jenkins时区设置为北京时间
- MSP430杂谈--AD7793硬件SPI驱动与模拟SPI驱动
- Python学习之==线程进程
- Android核心分析之二十五Android GDI之共享缓冲区机制
- 进击的序列帧 一(两篇)------- 让你的序列帧立体起来!
- Windows Server 2008 R2 企业版操作说明手册
- 12款高质量的免费 HTML 网页模板下载
- C++ ACM程序设计大赛--练习1
- java实现咖啡店模拟_装饰者模式学习:模拟咖啡馆的点单系统来剖析装饰者模式的使用 + 装饰者模式在java I/O 中的应用...
- 计算机电源德国产,德国原装崇拜者来一发?BeQuiet! Straight Power 11全模电源
- springboot集成微信和QQ第三方登录
- 《Kotin 极简教程》第14章 使用 Kotlin DSL