【C++】进制

一、进制转换

1、十进制转二进制

如十进制34转为二进制:
34/2=17······0
17/2=8·······1
8/2=4········0
4/2=2········0
2/2=1········0
1/2=0········1
得到34二进制:0010 0010

2、十进制转八进制(同上)

3、二进制转八进制

从低位开始,将二进制数每三位一组,转成对应八进制数

4、二进制转十六进制

从低位开始,将二进制数每四位一组,转成对应十六进制数

5、八进制转二进制

八进制数每一位,转成对应的一个三位二进制数

6、十六进制转二进制

八进制数每一位,转成对应的一个四位二进制数

二、位运算

1、原码、反码、补码

二进制中,最高位符号位:0表示正数,1表示负数。
正数:原码、反码、补码相同(三码合一)
负数:

  1. 负数反码=原码符号位不变,其他位取反
  2. 负数补码=反码+1 (负数反码=补码-1)
-2的原码:
10000000 00000000 00000000 00000010
-2的反码:
11111111 11111111 11111111  11111101
-2的补码:
11111111 11111111 11111111 11111110

2、位运算符

C++一共有6个位运算符(&、|、^、~、>>、<<)
3. 按位与&
4. 按位或|
5. 按位异或^:两位一个为0、一个为1,结果为1,否则为0;
6. 按位取反~
7. 算数右移>>:低位溢出,符号位不变,用符号位补溢出高位
本质上:右移1位,等价于/2
8. 算数左移<<:符号位不变,低位补0
本质上:左移1位,等价于2*

3、变换操作

1.题目:二进制中1的个数

int NumberOf1(int n) {
       int count = 0;
       while(n!= 0){
           count++;
           n = n & (n - 1);
        }
       return count;
   }

对于一个不为0的整数,其二进制至少有1位为1。令其-1,则该整数自右往左第一个1变为0,第一个1右侧所有0变为1。再与原数做与操作,则右侧第一个1变为0。上述操作能运行几次,则说明原数中有多少个1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值