八进制数到底有没有负数??请接着往下看
发布网友
发布时间:2022-05-29 17:34
我来回答
共5个回答
热心网友
时间:2023-10-29 05:13
首先:八进制数的确是没有负数的
其次:我解释一下你说的现象
你的赋值其实赋的是十进制数 a = 21(即进制025) ;
b = 4294967275(16进制0FFFFFFEB,八进制37777777753) ;
(这里谢谢楼下提醒,原先写错了)
要赋成八进制数要写成 a = '\025' ; (我写成 a = \025 ; 编译错误)
八进制数是不能写负数的 也就是不能写成 '\-XXX' 的
我在Visual C++ 6.0 上写 '\-001'的时候出现编译错误
查看汇编代码 int b = '\-001' ;汇编代码为
mov dword ptr [ebp-8],2D303031h
也就是说 '\-001' 在计算机内是表示为 2D303031h 的,为什么会这样我就不知道了
但是可以说明一点:八进制是不能表示为负数的
至于计算机内是怎么运算的,你给的代码就是按十进制来算的,计算机内部的运算过程我想就不用给了吧.
为什么八进制没有负数,我的理解是:负数只是为了表示10进制数而出现的,而计算机内部就没有负数的概念,它就是几个二进制的位而已,所以就没必要弄出二进制的八进制,再次,它只是相当于对二进制的一个缩写,而二进制可以根据规则和十进制互换,所以没有负的。
希望你可以理解。
热心网友
时间:2023-10-29 05:13
计算机中运算是以补码进行的,而不是原码
热心网友
时间:2023-10-29 05:14
八进制当然有负数,只不过程序语言中八进制和十六进制一般是用来方便我们观察一个变量的二进制位的值的,我们并不会去关心它是正值还是负值.
你可以用printf("%d",b);看下,结果会是-21,说明程序还是承认负的八进制数的.
热心网友
时间:2023-10-29 05:14
任何进制都有负数和小数!在计算机内部,所有的整数都是以二进制补码的形式存储的,比如int型四个字节的-1,在计算机内部就是
1111 1111 1111 1111 1111 1111 1111 1111
用-01也是一样,加减就和小学数学学的摆竖式是一样的,最高位溢出就不管了。
热心网友
时间:2023-10-29 05:15
其了怪了,8进制为何没有负数?
-----------------------------------------------
请Hi我
-----------------------------------------------
楼上
int a = 025;其实是将十进制21即十六进制0x0015即二进制0000 0000 0000 0001 0101(16位或者在某些机器上32位)赋给了a
int b = -025;其实是将十进制-21即十六进制原码-0x15即16进制补码0xFFEB即二进制补码1111 1111 1111 1011 赋给了b