负数在计算机中用补码表示。这是教科书上到表示,由于时间久远,又由于上课没好好学,以至于补码是啥,在心中没留下任何到痕迹,补习一下。
原码:
整数在内存中用原码表示,即按绝对值大小转换成二进制
如:
00000101是
5到二进制表示
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码
如:
00000101按位取反,得
11111010
补码:反码+1
如:
11111010+1得
11111011,16进制表示位0xFB
二进制转换为10进制
int converse(string str) {
int result = 0;
int i, j;
const char *str_cstring = str.c_str();
for(i = 0; i < str.length(); i++) {
char ch = str_cstring[str.length() - i - 1];
int digital = ch - 48;
if (digital) {
result += 1 << i;
}
}
return result;
}
cout << converse("0101") << endl;
cout << converse("1101") << endl;
输出结果为:
5
13
上面到函数只能按原码转换,即只能转换非负数。
int converse2(string str) {
int result = 0;
int i, j;
const char *str_cstring = str.c_str();
int flag = str_cstring[0] - 48;
if (!flag) {
for(i = 0; i < str.length(); i++) {
char ch = str_cstring[str.length() - i - 1];
int digital = ch - 48;
if (digital) {
result += 1 << i;
}
}
} else {
int mask = 1;
for (i = 1; i < str.length() - 1; i++) {
mask += 1 << i;
}
for(i = 0; i < str.length() - 1; i++) {
char ch = str_cstring[str.length() - i - 1];
int digital = ch - 48;
if (digital) {
result += 1 << i;
}
}
result--;
result = ~result;
result &= mask;
result *= -1;
}
return result;
}
cout << converse2("0101") << endl;
cout << converse2("1101") << endl;
cout << converse2("1111") << endl;
cout << converse2("1111111111111011");
cout << converse2("1111111111111111");
输出结果为:
5
-3
-1
-5
-1
注:实际上整形的数是32位的,在32位的情况下
1101也是正数
分享到:
相关推荐
补码表示法是一种常用的二进制表示法,它将负数表示为其补码的形式。补码是将二进制数的每一位取反,然后加 1 得到的结果。例如,二进制数 1010 的补码是 0101 加 1 得到的 0110。 在 dec2binPN 函数中,我们首先...
* 正数的二进制表示形式的第一位数字为 0,而负数的二进制表示形式的第一位数字为 1。 * 将十进制数转换成其他进制可以使用 Java 语言中的 Integer.toBinaryString()、Integer.toHexString()、Integer.toOctalString...
Matlab 负数十进制转二进制代码 在 Matlab 中,进行十进制到二进制的转换可以使用 dec2bin 函数,但是该函数只能对正数进行转换。为了实现负数的十进制到二进制的转换,需要使用补码表示法。 在本代码中,我们编写...
补码表示法作为当前最常用的负数二进制表示方式,其重要性不言而喻。它为计算机提供了一种高效且一致的方法来处理正数和负数,简化了硬件设计,并提高了计算的准确性。软件开发人员和计算机工程师必须充分理解这些...
在Delphi编程语言中,处理这种二进制表示负数的过程可以通过内置函数或者自定义算法来实现。Delphi提供了诸如IntToBin和BinToInt这样的函数,用于在十进制和二进制之间进行转换。然而,当你需要处理负数时,这些内置...
总结来说,负数的二进制表示是通过符号位和2的补码实现的,这使得计算机能够高效地执行加法和减法运算,同时处理溢出情况。对于编程和系统设计人员,理解和掌握这些基本概念是至关重要的,因为它们构成了现代计算机...
本文将深入探讨浮点数的二进制表示,并通过一个源代码实例介绍如何进行浮点数与二进制之间的转换。 浮点数的二进制表示遵循IEEE 754标准,该标准定义了单精度(32位)和双精度(64位)浮点数的格式。对于单精度...
### C语言浮点数的二进制表示 #### 前言 在计算机科学领域,尤其是在编程语言如C语言中,了解数据类型的底层实现是非常重要的。对于浮点数而言,其内部表示方式决定了如何准确地处理数值计算。本文将深入探讨C语言...
对于小数的进制转换,通常会涉及到浮点数的二进制表示,如IEEE 754标准。Java并没有直接提供将十进制小数转换为其他进制的内置方法,但可以通过一些数学运算和位操作实现。例如,将十进制小数转换为二进制通常需要...
在补码表示中,负数是通过对其绝对值的二进制表示逐位取反(除了最高位,即符号位保持不变)后再加1来获得的。这确保了加法和减法运算的简单性和一致性。 以下是`dec2binPN()`函数的详细工作原理: 1. **输入参数*...
通过查看"floatbin"的源代码,开发者可以学习如何解析和构建浮点数的二进制表示,理解指数和尾数的计算方法,以及如何处理溢出和下溢等异常情况。此外,对于理解和优化浮点数运算,以及深入学习计算机体系结构和编译...
任意输入一个十进制整数,包括正数负数,通过程序实现可以输出相应的二进制编码
在编程中,调试工具可以帮助我们查看变量的二进制、八进制、十六进制或十进制表示,以便理解其实际值。 6.7 本章小结 进制转换虽然看似简单,但却是理解计算机底层工作原理的关键。掌握不同进制间的转换有助于我们...
3. **负数的二进制表示**: 在计算机中,负数通常使用二进制补码表示。补码是将正数的二进制表示按位取反(0变1,1变0),然后加1得到的。对于负数,最高位(符号位)通常设置为1,表示这是一个负值。 4. **C++...
本文通过一个具体的Java程序实例,详细介绍了如何将十进制数(包括正数和负数)转换为二进制表示的方法。通过对程序逻辑的逐步分析,我们不仅学习了基本的转换过程,还深入了解了负数在计算机中的补码表示方式。这种...
将所有余数倒序排列,得到的就是二进制表示。对于负数,可先将其转换为正数进行计算,再在前面加上负号。 ```cpp #include #include std::string decimalToBinary(int num) { std::bitset<32> bits(num); ...
在实际应用中,可能还需要考虑一些额外的问题,比如数据验证(确保输入的是有效的二进制字符串)、错误处理(处理除法溢出、负数等特殊情况)、性能优化(对于大量数据的快速转换)等。这些都是提高代码质量、可靠性...
这种方法适用于大部分情况,但不适用于负数,因为负数的二进制表示是补码形式。 为了处理负数,我们可以使用`std::bitset`类,它是C++标准库的一部分,能方便地处理二进制数据: ```cpp #include std::string ...