c语言中,一个八进制位=3个2进制位没错对吧,那么我给你一个八进制数"15433062510",

c语言中,一个八进制位=3个2进制位没错对吧,那么我给你一个八进制数"15433062510",按理论上来说,它换成2进制是33位,显然已经超出了一个int数4个字节的范围,但是大家可以试一下用进制换算器试一下,它所换算出来的2进制都还没有超过32位,仅仅是31位,这是怎么回事。谁能告诉我,谢谢

因为这个八进制数的第一位是1,转成二进制是001,它只占1位,而不是你理解的3位。
如果把第一位换成2-7,就会出现你说的越位了。因为int型第一位是符号位,表示数的正负,不表示值。追问

1 2 3都可以吧??

4的二进制才是100

才刚好3位

哥!哥!我需要你

追答

我刚才说了int型第一位是符号位,表示数的正负。2的话,二进制是10,占两位。如果你定义的是unsigned int,23就不会越界了

追问

你是不是。。。搞错了

int 是4个字节

等等

我上课

追答

我没搞错,是4字节,一个字节8位。变量类型分为有符号和无符号两种。有符号可以表示正负,第一位是符号位,其他位共同表示这个数。无符号的不能表示负数,所有位共同表示数值,最小最是0。

追问

哦,我懂了

你的意思是咱们只看第一位

再根据数据类型就可以轻松判断是豆溢出

对不对

追答

你题目里说的是int型,所以表示数值的只有31位,那么就只有1不会让这个八进制越位。如果你题目说unsigned int,那么2和3也不会越位

追问

对对对,我理解你的意思了

你是不是编程特别好

我以后不懂了可以问你吗

追答

你问吧,我会的话,就给你答

平时上班,可能没时间

追问

那我现在再问你一个问题

还是int,但是我换成了十六进制,ffffffff这显然也是32位,这显然超过了int的范围(31)位,所以我想问的是

给你一个十六进制数你怎样快速判断是否溢出。。

谢谢你啊

我上大一,所以问的问题比较弱智

你不要介意

追答

int型的换不成ffffffff,最大到7fffffff

追问

那我就在int要打ffffffff,这不就是溢出或者越界了嘛

帮个忙,谢谢

追答

你要int打ffffffff,输出十进制的话,应该是负数,因为溢出了。你纠结这个没什么太大意义。因为你编码的时候需要给变量分配足够空间,如果可能出现溢出的话,一般会直接把类型改了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-21
int型最大值为2147483647,十位十进制数,
15433062510转十进制得1819043144没有超出int最大值
相似回答