-
在计算机中,没有原始或反向代码。
输入的值,无论是正值还是负值,都会被编译并存储为补码。
编写一个 C 程序来显示数值的二进制,如下所示。
-
0000 的二进制 7
0111,是按位反,结果是 1111
注意,最高位数是1,表示这是一个负数,负数是计算机中的补码,补码是十进制,补码负号保持不变,其他的都倒过来,最后加1,这就是原码。 即 1000
1000 是 -8 由公式 n
结果,它是。 (n+1)
-
正数取自原始代码,负数对应正数,然后逐位加,如19,原码用8位二进制00010011,然后00010011其补码和反码。
对于-19,因为19的8位原码是00010011的,所以每个位的反11101100,然后加上1,1110110101,这样-19的原始码10010011,反码11101100,补码11101101
-
正的与原始代码相同。
否定的必须首先将原始代码转换为反向代码(不要告诉我您甚至不能反转代码)。
将 1 添加到反向代码的基数中,您就可以开始了。
-
正数与素数、逆数和补数相同。
负数的原码、逆码和补码是不同的。
让我们以两个字节(16 位)为例(短类型)来理解这一点:
1) 原始 = 1000 0000 0000 0001 最高位为符号位 1 负,0 正,数据总长度为 16 位
1) 反 = 1111 1111 1111 1110 除符号位外,原始代码是逐位反转的。
1) 补码 = 1111 1111 1111 1111 反码 +1
由此,我们来看一下 -12345 的补码:
12345) 原件 = 1011 0000 0011 1001
12345) 反 = 1100 1111 1100 0110
12345) 补码 = 1100 1111 1100 0111
我觉得你误会错了,因为你不了解数据按字节的存储,计算机中数据的最小存储单元是字节,一个字节占用8位,一般(32位机器)数据存储空间的大小定义为:
char 1byte
short 2bytes
int 4bytes
long 4bytes
float 4bytes
double 8bytes
在 C 程序中,可以使用 sizeof 命令来检查某种类型的空间的大小,例如 printf("%d", sizeof(long) ) 可以编写自己的程序来测试您的机器。
-
C 语言,可以使用 int 类型。
整数是 16 位二进制数,模数为 65536。
那么,12345 的补码是:65536 12345 | = 53191。
写成 16 位二进制数,它是:1100 1111 1100 0111。
-
在 C 中,所有整数数据实际上都存储为补码。
要计算补码,首先要知道原始代码的概念,它是十进制数的二进制表达式,例如,100 的原始代码是 1100100。
补码的计算原理如下:
1 对于无符号数和有符号数中的正数,补码为原始代码本身;
2 对于有符号数中的负数,补码是真值加一的绝对值的倒数,其中反码为原始码,位反转。
负数示例:
当 100 用 char(8 位)表示时,可以按照以下过程计算其补码:
1.原始代码为100 01100100
2.按位取反转码,得到反转码为10011011
3.在逆码中加1,即10011011+1=10011100。
所以 -100 的补码表示是 10011100,即 0x9c(十六进制)。
-
首先,建议房东去补上“原守则”、“反守则”和“补码”的相关知识。
我将首先分解它(假设您已经知道这一点):
首先,让我们从无符号的角度来看问题中的数据:
n = 0x7fff
m = 0x8000
可以看出,对于 n,他的二进制模式是:0111 1111 1111 1111
对于 m,他的二进制模式是:1000 0000 0000 0000
如您所见,最高符号位 n 为 0,m 为 1
所以如果我们从有符号数的角度来看 m 和 n 的二进制数据,我们知道 n 符号位(最高位)是零,所以 n 是正数,m 符号位是 1,所以它是一个负数。
对于补码,正数很容易计算,即他的值,即 0111 1111 1111 1111 = 0x7fff = 32767
对于负数 m,我们可以这样做以了解它的值:
假设 m |m|= x,那么我们得到 m 的 x
m = 1000 0000 0000 0000
否定:m = 0111 1111 1111 1111
加 1 m + 1 = 1000 0000 0000 0000
这个问题中的数据比较特殊,所以你可以看到 m 和 m+1 的结果看起来是一样的,其实你可以列出其他值来计算,一般两种按位模式是不同的)。
x = 32768
然后我们可以看到 m = -x = -32768 或更多。
-
在 C 语言中,不需要补语。
补码是汇编语言中的有符号数字。
C语言是一种高级语言,可以和人类语言一样写,直接使用加号和减号,不需要使用补语。
-
正补码 = 其二进制。
例如,5 的补码 = 原始代码:101;
即 0000,0000,0000,1001
负补码 = 负数绝对值的二进制,然后倒数 +1;如-5:
-
正数的补码是它原来的码本身,负数的补码是它的绝对值的原码,反转1位
-
正数和 0 的补码总是它自己,负数的补码是它的绝对值按位反转,加上 1。
0] 补码 = 00000000b
1] 补码 = 00000001b
2] 补码 = 00000010b
3] 补码=00000011b
0] 补码 = 00000000b
1] 补码 = 11111111b(注意:-1 的绝对值为 1,数字反转为 11111110b,加 1 得到 -1 的补码:11111111b)。
2] 补码 = 11111110b
3] 补码 = 111111101b
-
你可以在任何 C 语言书籍中看到细节,我有多清楚并不重要。
我会告诉你我的理解。 把所有的数字都想象成时钟上的数字。
00000000---00000001--00000002.。。一直到 ffffffff
ffffffffff 为 -1
我说的是 32 位有符号数字 int 使用这个时钟概念来理解补码,我保证你永远不会忘记它。
否则,只要记住补码=反码+1反码=原码和ffffffff取差额,这样你迟早要在面试中被蒙蔽。
希望对你有所帮助。
-
正数是反码,负数是反码+1
-
如果是正数,补码=原始码,如果是负数,x = x + 1 + 0xffffffff,然后找到 x 的原始码。
scanf("%d", &x);
x = (x + 1 + 0xffffffff) %0xffffffff;
todo...然后只需找到 x 的原始代码即可。
此0xffffffff是 int 可以表示的最大值,如果 int 为 4 个字节,则通常为 4 个字节。
-
这就是问题所问的吗? 或者您是否要求输出十进制数的内存表示?
-
“当您输入它时,计算机将其作为补充,然后输出原始代码”是不正确的。
计算机以补码的形式存储整数数据。 与补体 1解决了 +0、-0、2 的问题所有操作都可以通过添加剂完成。
当我们输入数据时,我们都是人们在现实生活中可以理解的数字:例如,十进制数,当计算机存储它们时,它们会自动将它们转换为补码进行存储和计算。 输出时,会根据人的要求自动转换为相应的可识别数据进行展示。
在超过 32 位的机器上,短路占用两个字节,这是一个有符号的数字,可以表示以下数据范围:-32768 32767。 你输入 65535,然后你超出了它的表示范围,计算机存储了 16 个 1,对于短类型,16 个 1 表示 -1,所以你的输出是 -1
呵呵,这个哥哥和我几个月前的样子很像。 在学习 C 之前,我认为 C 应该能够实现任何事情。 但是在学习之后,我发现我离Windows还很远。 >>>More
在 VisualStudio 2013 中编写和调试 C 语言程序的步骤: 1.打开 [文件] - 新建 - 项目以打开“新建项目”窗口。2. 在[模板]、[名称]、[位置]和[解决方案名称]中选择[Visual C++] Win32控制台应用程序,可以根据需要填写。 >>>More
y 年 m 月 d 日,是日日吗?
计算:天 = mon[1] +mon[2] +mon[m-1] +d; >>>More