进制 (转)

由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。  
  但,二进制数太长了。比如int   类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:  
  0000   0000   0000   0000   0110   0100  
  面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++,以及java中   没有提供在代码直接写二进制数的方法。  
  八进制数的表达方法  
  如何表达一个八进制数呢?如果这个数是   876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。  
  所以规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数的表达方法。  
  现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:  
  int   a   =   100;  
  我们也可以这样写:  
  int   a   =   0144;   //0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。  
  千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。  
  十六进制数的表达方法  
  如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。  
  16进制数必须以   0x开头。比如   0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O)  
  以下是一些用法示例:  
  int   a   =   0x100F;  
  int   b   =   0x70   +   a;  
  至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,10进制数有正负之分,比如12表示正12,而-12表示负 12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,编译器并不把它当成一个负数。  

### 进制换的实现方法 在编程中,进制换可以通过多种方式实现,包括使用内置函数、手动计算以及借助数据结构(如栈)。以下是几种常见的实现方法: #### 1. 使用内置函数实现进制换 许多编程语言提供了内置函数来简化进制换。例如,在Python中可以使用`bin()`、`oct()`和`hex()`将十进制数分别换为二进制、八进制和十六进制[^2]。同时,使用`int()`函数可以将其他进制的字符串换为十进制数。 ```python num = 10 print("10进制2进制结果为:{}".format(bin(num))) # 输出: 0b1010 print("10进制8进制结果为:{}".format(oct(num))) # 输出: 0o12 print("10进制16进制结果为:{}".format(hex(num))) # 输出: 0xa # 其他进制10进制 bin_str = "0b1010" oct_str = "0o12" hex_str = "0xa" print("2进制10进制结果为:{}".format(int(bin_str, 2))) # 输出: 10 print("8进制10进制结果为:{}".format(int(oct_str, 8))) # 输出: 10 print("16进制10进制结果为:{}".format(int(hex_str, 16))) # 输出: 10 ``` #### 2. 手动实现进制换 手动实现进制换通常涉及数学运算。例如,将二进制换为十进制数时,可以采用“填空法”,即将每一位数字乘以其对应的权值并求和[^1]。具体步骤如下: - 确定每一位的权值(从右至左依次为2^0, 2^1, 2^2...)。 - 将每一位数字与其权值相乘并累加。 以下是一个手动实现的例子: ```python def binary_to_decimal(binary_str): decimal = 0 power = 0 for digit in reversed(binary_str[2:]): # 忽略"0b"前缀 decimal += int(digit) * (2 ** power) power += 1 return decimal binary_str = "0b1101" print("2进制10进制结果为:{}".format(binary_to_decimal(binary_str))) # 输出: 13 ``` #### 3. 使用栈实现进制换 栈是一种适合解决进制换问题的数据结构,尤其是将十进制换为其他进制时。例如,C语言中可以利用“除基取余”的方法,并通过栈逆序排列余数来完成换[^4]。 以下是一个C语言实现的示例: ```c #include <stdio.h> #define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int top; } Stack; void initStack(Stack *s) { s->top = -1; } void push(Stack *s, int value) { s->data[++(s->top)] = value; } int pop(Stack *s) { return s->data[(s->top)--]; } void decimalToBinary(int num) { Stack s; initStack(&s); while (num != 0) { push(&s, num % 2); num /= 2; } printf("二进制为:"); while (s.top != -1) { printf("%d", pop(&s)); } printf("\n"); } int main() { int num = 13; decimalToBinary(num); // 输出: 二进制为:1101 return 0; } ``` #### 4. Java中的进制换实现 Java中也可以通过类似的方法实现进制换。以下是一个使用循环和字符串拼接的方式将十进制换为二进制数的示例[^3]: ```java public class BaseConversion { public static void ttt(int num) { StringBuilder binary = new StringBuilder(); while (num != 0) { binary.insert(0, num % 2); num /= 2; } System.out.println("二进制为:" + binary.toString()); } public static void main(String[] args) { int num = 13; ttt(num); // 输出: 二进制为:1101 } } ``` ### 总结 编程中实现进制换有多种方法,包括使用内置函数、手动计算以及借助数据结构(如栈)。每种方法都有其适用场景,开发者可以根据需求选择合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值