
面试高老师为您分享以下优质知识
求整数的二进制原码需根据数的正负确定符号位,并将数值部分转换为二进制形式。以下是具体方法:
一、基本规则
- 正数:最高位为0
- 负数:最高位为1
(例如,32位系统中,正数123的原码为`00000000 00000000 00000000 00001111`)
数值位转换
- 直接将整数的二进制形式存储,其余位为数值位。例如,123的二进制为`1111011`,加上符号位后为`01111011`
二、具体实现步骤
确定位数
- 32位系统:`int`类型为32位,需预留1位符号位
- 8位系统:`byte`类型为8位,符号位+数值位=8位
处理正数
- 直接将数值转换为二进制,符号位自动为0。例如,`int a = 15;`的二进制原码为`00000000 00000000 00000000 00001111`
处理负数
- 先取绝对值的二进制表示,再在最高位加1。例如,-15的二进制原码为`10000000 00000000 00000000 00001111`(15的二进制为`00000000 00000000 00000000 00001111`,加符号位后为`10000000 00000000 00000000 00001111`)
三、注意事项
零的特殊性:
正0和负0在原码中不同,分别为`00000000 00000000 00000000 00000000`和`10000000 00000000 00000000 00000000`
位数一致性:不同系统位数不同,需根据实际位数处理(如32位或8位)
四、示例代码(C语言)
以下是获取整数原码的示例代码,适用于32位系统:
```c
include
include
include
include
void printOriginalForm(int number) {
int bits = sizeof(number) * 8;
char binaryStr[bits + 1];
int absValue = abs(number);
sprintf(binaryStr, "%0*b", absValue, bits);
if (number < 0) {
binaryStr = '1';
}
printf("%sn", binaryStr);
}
int main() {
int a = 15;
int b = -15;
printOriginalForm(a); // 输出: 00000000000000000000000000001111
printOriginalForm(b); // 输出: 10000000000000000000000000001111
return 0;
}
```
该代码通过`abs`函数获取绝对值,使用`sprintf`转换为二进制字符串,并根据符号位调整结果。