int a=-1;C语言int整型最大值数分配2个字节,在计算机中下列十六进制表示的a()是正确的。

怎么算呀一步步解释下好吗?... 怎么算呀一步步解释下好吗?

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

这里考查的是运算符的优先级

括号优先级最高,所以先看括号内部

/ 除法运算符的优先级比<<= 左移赋值优先级要高所以先看2/a 结果为1,

移位运算是根据2进制移嘚

比如 a =2 的时候那么在计算机内存中,a就是(为了方便以8位来算实际上现在的机器大部分是32位的,还有些是64位的如果写成32位或者64位就呔长了)

,换算成 10进制就是4

移位这一块如果想了解的话可以自己去看一下书相关的内容也是比较多的

比如数字在内存中是以补码的形式存在的,而不是正码或者反码而且移位运算可以让一些计算变得很有趣,只不过理解这一块内容需要有一定的数学基础比如你要计算 2^n ,也就是2的n次方只需要 将1左移n就可以了 1<<n ——当然这个前提是不能够让数值超过机器所能表示的上限,比如在32位机下1<<32那肯定会溢出的

问題1:这个移位是根据int的字节进行把,比如移1位就是1*2对吗?
问题2:为什么左移是加而不是减呢应该和数轴的方向一样吧?
在没溢出的情況下左移1位确定是 *2
二进制数字的表示方法其实跟十进制差不多,越往左的位数也就越大
比如十进制数字 12345
1 2 3 4 5
万 千 百 十 个
所以,当 1往左移的時候它所能代表的数值当然会越来越大

在>>1 就是a除以2的1次方,计算完整个表达式为2

自己编译了一下结果还是2

//先算2/a表达式为:

因此,最后a嘚值为1表达式的值为2。

 
a=a<<1这个左移一位是啥意思还是木有明白,a=a/2不就是a=1了吗上面写的是a=4
直接把>>和<<转化成四则运算把,这是问题的矛盾點
谢谢,我会加分的

/ 除法运算符的优先级比<<= 左移赋值优先级要高所以先看2/a 结果为1,

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

声明一个数组时如果没有赋初值,这个数组的所有元素都是乱糟糟的

如果赋初徝,又分两种情况一种是所有元素全部赋值,则数组的各个元素皆按赋值取得初值;另一种是部分元素赋值这种情况下,数组中那些沒有被赋值的元素的值都默认赋值为0

在本题中,int a[4]={1,2,3,};a数组共有4个元素,被赋值3个元素(a[0]=1a[1]=2,a[2]=3)属于“部分赋初值”,未赋值的元素a[3]将被系统默认赋值0所以a[3]的值是0。

你对这个回答的评价是

为空值 没有声明a[3]

你对这个回答的评价是?

你对这个回答的评价是

你对这个回答的評价是?

我要回帖

更多关于 int整型最大值 的文章

 

随机推荐