关于位运算的几个问题,高手帮忙解答。

省略号 发布于 2011/11/07 17:23
阅读 201
收藏 0
各位朋友,小弟在学习的过程中遇到这么几个问题,希望大家能帮忙解答一下,不胜感激!

一、这段程序虽然编译成功,但不是很理解,是在书上看到的,希望帮忙解释一下,最好具体的说说每一步怎么实现。
main() 
{ 
    int a,b,c,d,n1,n2,n,c1,c2; 
    a=0x0abf89de; 
    n1=5; 
    n2=8; 
    n=sizeof(int)*8; 
    b=~0; 
    c1=~(b<<(n-n1+1)); 
    printf("c1=%x\n",c1); 
    c2=(b<<(n-n2)); 
    printf("c2=%x\n",c2); 
    c=c1&c2; 
    printf("c=%x\n",c); 
    d=a&c; 
    d=d>>(n-n2); 
    printf("d=%x\n",d); 
} 

二,要求运用位运算符编写程序,对一个整数实现循环左移n位。

三,编写程序,用字符型变量存放一个整数(0-255),对该数的二进制形式
     取出它的奇数位(即从左边的第1、、3、5、7位)。

加载中
0
Yisen
Yisen
问题错了吧,是取该数的十六进制的奇数位吧?
程序是书上的?确定吗?哪本书告诉大伙..
0
省略号
省略号

题目没错,

我用的是程序设计基础(c语言)实验指导  清华大学出版社 潘玉奇、刘明军编著

所问问题在40页,自己想了很久没弄明白。

 

0
晓南
晓南

二、循环左移n位是:

// int a=OneNum , n=AnotherNum, i; 32bit

n &= 0x20; // 相当于n %= 32;

for(i=0;i<n;i++) a = (a&0x80000000)?((a<<1)|0x1):(a<<1);

三、// BYTE a=OneChar;

a = a&0xaa; // 0xaa即 10101010

0
返回顶部
顶部