简单LinuxC程序之位运算的简单应用
来源:互联网 发布:ubuntu不支持exfat 编辑:程序博客网 时间:2024/06/10 06:51
题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位。
源代码:
#include <stdio.h>int func (int a,int p1,int p2,int flag){//将负数的补码转换为原码if (a < 0 && flag != 0){a -= 1;a = ~a;a = a|0x80000000; //改变符号位}//printf ("%d\n",a);int n = 0x40000000;int count = 0;n >>= (31 - p2);//printf ("%d\n",n);while (count <= (p2 - p1)){//printf ("%#x\n",n&a);if (n&a) //判断该位是否为1{printf ("1");}else{printf ("0");}n >>= 1; //让1一位一位向右移count++;}return 0;}int main(){int a,p1,p2,flag;printf ("input a num(-2147483647~2147483647):");scanf ("%d",&a);printf ("input a p1(1~31):");scanf ("%d",&p1);printf ("input a p2(%d~31):",p1);scanf ("%d",&p2);printf ("选择补码或原码,补码输0,原码输其他:");scanf ("%d",&flag);func(a,p1,p2,flag);printf ("\n"); return 0;}
解题思路是让该数的每一个二进制位和1与运算,可以判断是否为1。我们可以初始化一个4字节数据,只有第31位是1,每次让这个数右移,就可以对想要操作的数的每一位做与运算。需要注意的是,负数在内存中的存储方式和我们一般使用的表示方法不同,是补码形式存储的,如果想要原码,就要先减1,然后对除符号位的每一位取反(可以先全部取反,再对符号位取反)。
阅读全文
0 0
- 简单LinuxC程序之位运算的简单应用
- 位运算的简单应用
- 位运算符的一些简单应用
- 位运算符的一些简单应用
- 位运算符的一些简单应用
- 位运算符的一些简单应用
- 位运算符的一些简单应用
- 位运算及其简单应用
- 位运算与其简单应用
- 位运算及简单应用
- 简单的位运算
- 简单的位运算
- LinuxC学习之函数指针与指针函数的简单区分与应用
- (精)位运算符的一些简单应用
- 位运算的简单总结
- 简单操作的位运算
- 简单LinuxC程序关于报数问题
- 简单LinuxC程序关于倒置句子中的单词位置(字符串逆序应用)
- hdu 3783 ZOJ
- HDOJ 3549 Flow Problem(network flow)
- linux初学者-正则表达式
- Hibernate学习-用oracle sequence序列生成ID的配置示例
- HTML入门笔记15-HTML中插入外部链接
- 简单LinuxC程序之位运算的简单应用
- Could not get BatchedBridge, make sure your bundle is packaged correctly
- JQuery.Ajax()的data参数类型
- Lnuix系统结构及文件管理
- bzoj1051【HAOI2006】受欢迎的牛
- POJ1961_Period_理解KMP中next数组的含义
- Conversion to Dalvik format failed: Unable to execute dex
- [LeetCode] 33. Search in Rotated Sorted Array
- JVM与java类的生命周期简述