Class 2
-
进制转换
我们一般计算中常用 进制,而电脑中的运输使用 进制。还有许多进制(常见的如 进制、 进制)。
进制转 进制。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,k; char digit[35];
int d_change() {
int m=0;
while(n) {
int r=n%k;
if(r<10) digit[++m]=r+'0'; //10 -> 9/8...
else digit[++m]=(r-10)+'A'; //10 -> 11/12...
n/=k;
}
for(int i=1,j=m;i<=j;i++,j--)
swap(digit[i],digit[j]);
return m;
}
int main() {
scanf("%d%d",&n,&k);
int len=d_change();
for(int i=1;i<=len;i++)
printf("%c",digit[i]);
return 0;
}
//code by TheCedar
主要思路是短除法,每次都将原数 对 取余,用 数组存储下来,最后倒序输出即可。
进制转 进制。
其实就是 进制转 进制的逆过程,其实是一样的。
-
原码,反码,补码及其之间的相互运算
原码 | 反码 | 补码 | |
---|---|---|---|
正数 | 符号位为 | 反码 原码 | 补码 原码 |
负数 | 符号位为 ,其他位是该数绝对值的二进制数。 | 符号位不变,其它为为原码取反。 | 补码 反码 |
如下题:求整数 的 位二进制补码。
注:
原码: Original Code 上面简称
反码:Inverse Code 上面简称
补码:Complementary code 上面简称
的 位补码为 。
-
位运算的初步认识与使用
符号 | 名称 | 运算规则 |
---|---|---|
与 | 两位都为 时为 ,否则为 。 | |
| | 或 | 有一位为 时为 $$1,否则为 |
~ | 取反 | |
^ | 异或 | 两位不同为 ,两位相同为 |
左移 | 将二进制数位整体向左移动若干位,高位丢弃,空位补 。 | |
右移 | 将二进制数位整体向左移动若干位,低位丢弃,高位补 。 |
Example:位运算的一些特殊用法。
1. 判断奇偶性。
if(x&1) cout<<"even"; //奇数
else cout<<"odd"; //偶数
2. 判断整数 的二进制中倒数第 位是否为 。
if(x&(1<<(i-1))) ... // x 的二进制中第 i 位为 1.
else ... // x 的二进制中第 i 位为 0.
3. 将整数 的二进制倒数第 位变为
x=x|(1<<(i-1));
4. 将整数 的二进制中最后一个 变为
x=x&(x-1);
-
计数基本原理
如下题:由 这五个数字组成不同的三位数有几种?
易得,总共有一下几种序列,每个序列能组合出的三位数数都可以是符合题意的三位数,统计这些三位数的个数即可。
。
-
排列 & 组合
如下题 个人,两个人组一队,总共组成三队,不区分队伍的编号,问不同的组队情况有几种。
易得,总方案数为如下式子: