位运算

本文详细介绍了二进制位运算的基本概念及其在C语言中的应用,包括与、或、异或、左移和右移操作,并展示了如何在C++中输出不同进制的数值。此外还提供了一个计算整数二进制表示中1的数量的示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.二进制的位运算

位运算只有五种:    与(&)        或(||)        异或(^)        左移(<<)        右移(>>)

1.异或:相异为1,相同为0

2.左移:左边舍弃,右边补0

0000 1010 << 2    =  0010 1000

1000 1010 << 3    =  0101 0000

2.右移:右边舍弃,左边 正数补0,负数补1

0000 1010 >> 2    =  0000 0010

1000 1010 >> 3    =  1111 0001

2.各种进制的表示方法

在C语言里,整数有三种表示形式:十进制,八进制,十六进制。

1.十进制:除表示正负的符号外,以1~9开头,由0~9组成。如,128,+234,-278.

2.八进制:以0开头,由0~7组成的数。如,0126,050000.

3,十六进制:以0X或0x开头,由0~9,A~F或a~f 组成。如,0x12A,0x5a000.

在计算机资料中不同的数制的数的表述有约定:

二进制数加后缀B,八进制数加后缀Q,十进制数加后缀D,十六进制数加后缀H,其中十进制的后缀D可以省略(默认)

比如:11B,11Q,11D,11H就分别是二进制数,八进制数十进制数,十六进制数

如果是 11 无后缀的数慢步默认为十进制数

3.计算机中整数的二进制存储

整数是4字节,一个字节八位,总共占32位

正数 1 ~ 2147483647    ,负数  -2147483648 ~ - 1


0000 0000 0000 0000 0000 0000 0000 0001    0x0000 0001       1

0111 1111 1111 1111 1111 1111 1111 1111    0x7FFF FFFF       2147483647(2^31-1)


0000 0000 0000 0000 0000 0000 0000 0000    0x0000 0000       0


1000 0000 0000 0000 0000 0000 0000 0000    0x8000 0000       -2147483648(-2^31)
1111 1111 1111 1111 1111 1111 1111 1111    0xFFFF FFFF         -1

4.C++中输出八进制,十六进制和二进制

oct            八进制

dec            十进制 

hex            十六进制

    int n_max = 42; 
 
    cout<<n_max<<endl;          //42
  
    cout<<hex<<n_max<<endl;     //2a  
     
    cout<<oct<<n_max<<endl;     //52 
      
    cout<<(bitset<num>)n_max<<endl; //num 输出的位数
  //0000 0000 0000 0000 0000 0000 0010 1010 
  //需头文件 #include<bitset>

5.求二进制中1的个数        

输入一个整数,输出该数二进制表示中1的个数。

如:1                                                            1

       0x7FFFFFFF   (2147483647)                   31

       0x80000000(-2147483648)               1

       0x7FFFFFFF  (-1)                                32

       0                                                             0  

int  NumberOf1(int n) {
         int count = 0;
         for(int i=0; i < 32; i++)
         {
             count += n%2;   //-1%2 为 -1
             n = n >> 1;
         }
         if(count<0)
             count = 0 - count;
         return count;
     }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值