位操作(C和指针)

/*

**编写一个函数unsigned int reverse_bits(unsigned int value);这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。

**例如在32位机器上,25这个值包含下列各位00000000000000000000000000011001   函数的返回值应该是10011000 0000 0000 0000 0000 0000 0000

*编写函数时要注意不要让它依赖于你的机器上整形值得长度00000000000000000000000000000001

*/

#include <iostream>

using namespace std;

unsigned int reverse_bits(unsigned int value)

{

unsigned int answer;

unsigned int i;

answer =0;

/*

**只要i不是0就继续运行,这就使循环与机器的字长无关,从而避免了可移植性问题

*/

for (i =1;i != 0;i<<=1)

{

//把旧的answer左移一位,为下一个位留下空间。如果value的最后一位是1,answer就与1进行or操作,然后将value右移至下一个位

answer <<=1;

if (value & 1)

{

answer |= 1;

}

value >>=1;

}

return answer;

}

int main()

{

unsigned int ans;

unsigned int ans2;

//ans=reverse_bits(24);

ans2=reverse_bits(25);

cout<<ans<<endl;

cout<<ans2<<endl;

}

虽然看起来有点简单但是逻辑性相当强,自己对于位操作处理的非常少!

时间: 2024-08-24 19:56:21

位操作(C和指针)的相关文章

蓝欧--lesson9[指针基础]

#define Number 10 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { //指针[通过%p可以把地址打印出来] 内存地址    //    int a = 20;//    int b = 30;//    int *p = &a;//    //    int *z = &b;//取地址符   *此时仅仅起到标识作用,告诉编译器,P事一个存放地址的变量//使用&

二级指针做函数的输入与输出

本文将介绍二级指针做函数输出以及做函数输入的三种内存模型从内存四区的角度对程序执行的过程进行剖析,通过这中方式来加深对指针的理解. 二级指针做输出(在被调函数中分配内存)模型: 主函数: int main() { char *p = NULL; int len = 0; getMem(&p, &len); printf("p=%s\n", p); FreeMem(&p); return 0; } getMem函数: int getMem(char **myp,i

redis翻译_内存优化

Special encoding of small aggregate data types 特别编码小集合的数据类型 Since Redis 2.2 many data types are optimized to use less space up to a certain size. Hashes, Lists, Sets composed of just integers, and Sorted Sets, when smaller than a given number of elem

linux 后台开发类常见问题及知识点

一.linux和os: netstat :显示网络状态 tcpdump:主要是截获通过本机网络接口的数据,用以分析.能够截获当前所有通过本机网卡的数据包.它拥有灵活的过滤机制,可以确保得到想要的数据. ipcs:检查系统上共享内存的分配 ipcrm:手动解除系统上共享内存的分配 (如果这四个命令没听说过或者不能熟练使用,基本上可以回家,通过的概率较小 ^_^ ,这四个命令的熟练掌握程度基本上能体现面试者实际开发和调试程序的经验) cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置

&lt;C&gt; 操作字符串的函数

一.strlen 1.头文件:#include<string.h> 2.返回值:(无符号int)字符串长度 3.作用:计算字符串的长度 4.与sizeof的区分:sizeof是求大小的 这里用一道例题来说明 1 #include<stdio.h> 2 #include<string.h> 3 4 int main() 5 { 6 char str1[] = "abcde"; 7 int a = strlen(str1); //5 8 int b =

16位 32位 64位操作系统下只有long 和指针占用的位数不同

(1)16位平台 char         1个字节8位 short        2个字节16位 int             2个字节16位 long         4个字节32位 指针         2个字节16位 (2)32位平台 char         1个字节8位 short        2个字节16位 int             4个字节32位 long         4个字节32位 long long    8个字节64位 指针         4个字节32位 (

在32位、64位操作系统下各数据类型所占的字节数

点击打开链接 在32位.64位系统当中,唯一改变的是指针的长度;在32位系统当中是4个字节.64位则是8个字节.所谓的32位.64位,这个指的是寄存器的位宽. 32位平台下结果: 64位平台下结果: 一.下面几点是值得大家注意的: 1.关于 int 的取值范围,缺省的int数值范围是由编译器设计者决定的,通常都是机器最为自然高效的位数.甚至,我们在32位的机器上,前提没有什么指令可以高效的的处理更短的整型值,我们可以将short.int.long都设置成32位. 2.浮点数在缺省的情况下 表示的

指针的再认识

/* ============================================================================ Name : Pointer.c Author : lf Version : Copyright : Your copyright notice Description : 指针的再认识 ============================================================================

转 32位64位操作系统基本数据类型字节大小

http://blog.csdn.net/huyisu/article/details/17604983 int型字长问题: ① C/C++规定int字长和机器字长相同: ② 操作系统字长和机器字长未必一致: ③ 编译器根据操作系统字长来定义int字长: 由上面三点可知,在一些没有操作系统的嵌入式计算机系统上,int的长度与处理器字长一致:有操作 系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义int字长:" 比如你在64位机器上运行DOS16系统,那么所有fo