面向云技术架构 - 痴者工良

  • 首页
  • 工良写的电子书
    • kubernetes 教程
    • 从 C# 入门 Kafka
    • 多线程和异步
    • 动态编程-反射、特性、AOP
    • 表达式树
  • 本站文章导航
  • 隐私政策
愿有人陪你颠沛流离
遇到能让你付出的事物或者人,都是一种运气。
能遇到,就该珍惜。或许你们最终没能在一起,但你会切实地感受到力量。
正因为这样,那段相遇才变得有价值,才没有辜负这世间的每一段相遇。
  1. 首页
  2. 笔记和吹水
  3. 代码片段
  4. 正文

按位与、按位或操作结果

2020年3月1日 3353点热度 1人点赞 1条评论
内容纲要

二进制数,
任何数与 N 个 1 进行按位与,结果等于自身;或者与 N 个 0 进行按位或,结果等于自身。
任何数与 N 个 0 进行按位与,结果是 N 个 0;任何数与 N 个 1 进行按位或,结果是 N 个 1;

与 N 个 1 按位与。
1 0 1 0 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 0 1 0 1 1 0 1 1 1 1

可以通过此特性来获取某几位上的数。

获取某几位上的数字

例如获取一个 int 类型 8-11 位的数据。
C#版

            int num, mark;          
            Console.WriteLine("输入一个整数(大于256)");
            num = Convert.ToInt32(Console.ReadLine());
            num = num >> 8;
            mark = ~(~0 << 4);    // 构造 00000000 00000000 00000000 00001111
            // mark = 0b00000000_00000000_00000000_00001111;
            num = num & mark;
            Console.WriteLine(num);
            Console.ReadKey();

C 语言

#include <stdio.h>
int main()
{
    printf( "输入数字(256以上)" );
    int num;
    int mark;
    scanf( "%d", &num );
    num = num >> 8; /* 移动8位,使8-11变成0-4位 */
    mark    = num & ~(0 << 4);
    printf( "result = 0x%x", mark );
    return(0);
}

输出一个数的二进制

原理是,0或1 跟 1 的按位与,等于自身,跟 0 的按位与等于 0 。
任意输入一个正整数,输出这个数的二进制。
C语言版本

#include <stdio.h>
int main()
{
    printf( "输入数字(256以上)" );
    int num;
    int mark;
    printf( "%d", '1' );
    scanf( "%d", &num );
    mark = 1 << 31;

    int i = 0;
    for ( i = 0; i <= 31; i++ )
    {
        printf( "%c", num & mark ? '1' : '0' ); /* 结果要么大于0,要么等于0 */
        /* putchar( num & mark ? '1' : '0' ); / * 强制转化为8位变量(低八位) * / */
        num = num << 1;
        if ( (i + 1) % 8 == 0 )
            putchar( ',' );
    }
    putwchar( 'B' );
    return(0);
}

C# 版本

            uint num;
            int mark;
            Console.WriteLine("输入一个整数(大于256)");
            num = Convert.ToUInt32(Console.ReadLine());
            mark = 1 << 31;
            string str = string.Empty;

            for (int i = 0; i < 31; i++)
            {
                Console.Write((num & mark) == 0 ? '0' : '1'); // 每一步的结果,首位要么为1,要么为0,
                                                              // 结果要么大于0,要么等于0
                num = num << 1;
                if ((i + 1) % 8 == 0)
                    Console.Write(',');
            }
            Console.Write("B");
            Console.ReadKey();
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 按位 操作 结果
最后更新:2020年3月2日

痴者工良

高级程序员劝退师

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

文章目录
  • 输出一个数的二进制

COPYRIGHT © 2022 whuanle.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备18051778号

粤公网安备 44030902003257号