C++关于二进制位操作小结

#include <iostream>
using namespace std;
//二进制位逆序。
int Grial(int x)
{
    int n = 32;
    int count = 0;
    while (n--)
    {
        count|= ((x&0x1) << n);
        x = ((unsigned)x >> 1);
    }
    return count;
}
int main()
{
    cout << Grial(1) << endl;
    return 0;
}

#include <iostream>
using namespace std;
//二进制位中的奇偶位互换。
int Grial(int x)
{
    int sum1 = x & 0x55555555;
    int sum2 = x & 0xaaaaaaaa;
    sum1 <<= 1;
    sum2 >>= 1;
    return sum1 | sum2;
}
int main()
{
    cout << Grial(6) << endl;
    return 0;
}

#include <iostream>
using namespace std;
//求两个数的和。

int Grial(int x, int y)
{
    if (!y)return x;

    //int ret = x^y;
    //-1%2=-1;

    int sum = x^y;
    int num = ((x&y)<<1);
    return Grial(sum,num);

}
int main()
{
    cout << Grial(3, 5) << endl;
    return 0;
}

#include <iostream>
using namespace std;
//推断一个数是不是2的n次方。
bool Grial(int x)
{
    return (x&(x - 1)) == 0;
}
int main()
{
    cout << Grial(4) << endl;
    return 0;
}

#include <iostream>
using namespace std;
//求二进制中1的个数。
int Grial(int x)
{
    int count = 0;
    while (x)
    {
        x = x&(x - 1);
        count++;
    }
    return count;
}
int main()
{
    cout << Grial(15) << endl;
}

#include <iostream>
using namespace std;
//求平均值。
int Grial(int x,int y)
{
    return (x&y) + ((x^y) >> 1);
}
int main()
{
    cout << Grial(20, 48) << endl;
    return 0;
}
#include <iostream>
using namespace std;
//求平均值。
int Grial(int x,int y)
{
    return x - (x - y) / 2;
}
int main()
{
    cout << Grial(3,9) << endl;
    return 0;
}
时间: 2024-10-19 00:19:43

C++关于二进制位操作小结的相关文章

JAVA中常用的二进制位操作

一,计算某个正数的二进制表示法中 1 的个数 1 //求解正数的二进制表示法中的 1 的位数 2 private static int countBit(int num){ 3 int count = 0; 4 for(; num > 0; count++) 5 { 6 num &= (num - 1); 7 } 8 return count; 9 } 算法思路:每次for循环,都将num的二进制中最右边的 1 清除. 为什么n &= (n – 1)能清除最右边的1呢?因为从二进制的

JAVA中常用的二进制位操作(转)

一,计算某个正数的二进制表示法中 1 的个数 1 //求解正数的二进制表示法中的 1 的位数 2 private static int countBit(int num){ 3 int count = 0; 4 for(; num > 0; count++) 5 { 6 num &= (num - 1); 7 } 8 return count; 9 } 算法思路:每次for循环,都将num的二进制中最右边的 1 清除. 为什么n &= (n – 1)能清除最右边的1呢?因为从二进制的

01 | 二进制:不了解计算机的源头,你学什么编程

我们都知道,计算机的起源是数学中的二进制计数法.可以说,没有二进制,就没有如今的计算机系统.那什么是二进制呢?为什么计算机要使用二进制,而不是我们日常生活中的十进制呢?如何在代码中操作二进制呢?专栏开始,我们就从计算机认知的起源--二进制出发,讲讲它在计算机中的"玄机". 什么是二进制计数法?为了让你更好地理解二进制计数法,我们先来简单地回顾一下人类计数的发展史. 原始时代,人类用路边的小石子,来统计放牧归来的羊只数量,这表明我们很早就产生了计数的意识.后来,罗马人用手指作为计数的工具

C++ 中的位操作

定义二进制变量: 一般是以八进制或者十六进制来定义,八进制数以0开头,十六进制数以0x开头 例如int  a = 0x80, 这里的80只能表示8个二进制位,它表示的是int的低8位,前面的24个二进制位补0,所以a = 128:也可以 a = –0x80, 此时a = -128:8进制同理 需要注意的是:如果0x-能够在整形内表示,则其默认是int,否则再看unsigned int能否表示,接着long long ,再接着unsigned long long (可以用cout<<typeid

Jan 08 - Reverse Bits; Binary; Integer; Bits; 复习位运算和二进制表达

复习 二进制位操作(bit operation),32bit integer 取值范围:-2^31 -- 2^31-1 0 1 1 1 1 1 1 1 = 127 0 0 0 0 0 0 1 0 = 2 0 0 0 0 0 0 0 1 = 1 0 0 0 0 0 0 0 0 = 0 1 1 1 1 1 1 1 1 = −1 1 1 1 1 1 1 1 0 = −2 1 0 0 0 0 0 0 1 = −127 1 0 0 0 0 0 0 0 = −128 (2‘ compliment)二补数系统

给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数

1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 0101 故它的二进制权值为7(二进制表示中有7个1) 现在要求一个比N大,且最靠近N的数,且这个数的二进制权值与N相同.(这里不考虑Integer.MAX_VALUE 和负数情形.) 对于有符号的32位整数而言:它们的补码如下: Integer.MAX_VALUE= 0111 1111 1111 11

c语言操作符小结

算数操作符(+,-,,/,%)+,-,,正常运算就好,但"/"和"%"较为特殊需要注意!"/":1)当该符号两端数据类型都为int时,输出类型为int .若符号两端数据类型不同时,则按精度小的类型进行计算.精度大的数被隐式类型转换(编译器自动转换)为精度小的类型.2)当除数为一个常数0时,编译器汇报编译错误.当除数为一个一个变量,变量的值为0时,编译通过但运行时会错."%":1)该符号只针对int 整型有效.2)当符号右端为常

redis实战笔记(3)-第3章 Redis命令

第3章 Redis命令 本章主要内容 字符串命令. 列表命令和集合命令 散列命令和有序集合命令 发布命令与订阅命令 其他命令 在每个不同的数据类型的章节里, 展示的都是该数据类型所独有的. 最具代表性的命令. 首先让我们来看看, 除了GET和SET之外, Redis的字符串还支持哪些命令. 3.1 字符串 在Redis里面, 字符串可以存储以下3种类型的值. 字节串( byte string) . 整数. 浮点数. 除了自 增操作和自 减操作之外, Redis还拥有对字节串的其中一部分内容进行读

传智播客C语言视频第二季(增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

?? 卷 backup 的文件夹 PATH 列表卷序列号为 000000F4 D4A8:14B0J:.│  1.txt│  2.txt│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│  ├─文档│  │      第1讲 C语言第一阶段.doc│  │      │  └─视频│          第1讲 C语言第一阶段.mp4│          ├─2传智播客_尹成_C语言从菜鸟到高手_第二章C语言跨平台HelloWorld-A│  ├─第10节 2.5.1-2.5.7C