c语言中,一个八进制位=3个2进制位没错对吧,那么我给你一个八进制数"15433062510",按理论上来说,它换成2进制是33位,显然已经超出了一个int数4个字节的范围,但是大家可以试一下用进制换算器试一下,它所换算出来的2进制都还没有超过32位,仅仅是31位,这是怎么回事。谁能告诉我,谢谢
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,输出十进制的话,应该是负数,因为溢出了。你纠结这个没什么太大意义。因为你编码的时候需要给变量分配足够空间,如果可能出现溢出的话,一般会直接把类型改了