首页 > 试题广场 >

以下代码执行后,val的值是?

[单选题]
以下代码执行后,val的值是___:
unsigned long val = 0;
char a = 0x48;
char b = 0x52;
val = b << 8 | a; 
  • 20992
  • 21064
  • 72
  • 0
推荐
B

b << 8 = 0x5200
val = 0x5200 | 0x48 = 0x5248 = 21064 
编辑于 2015-02-09 11:54:23 回复(5)

其中,横向的箭头表示, 在运算之前必须转换的; 竖向的箭头表示运算过程中默认转换的顺 序,也就是说, float 类型的数据在运算之前,都转换为 double 类型的数据进行运算,同理, short char 类型的数据在运算之前, 都是转换为 int 类型的数据进行运算。


发表于 2015-11-03 20:48:34 回复(4)
这里面涉及到了默认类型转换:当出现在表达式里时,有符号和无符号的char和short都会被自动转换为int类型,在需要的情况下,将自动转换为unsigned int类型,在K&C中(不是当前的C)中,float会被自动转换为double类型。
发表于 2015-07-10 11:02:55 回复(0)
左移一位是乘以2,右移一位是除以2。左移了8位,就是乘以8个2,也就是两个16。
所以b<<8 = 0x5200,再|a = 0x5248
发表于 2015-08-11 15:05:17 回复(0)
val = b << 8 | a;      //0x52=01010010左移8位为:010100100000000
    =010100100000000|01001000
    =0101001001001000
    =0x5248         //16进制
    =21064         //10进制
发表于 2015-04-11 10:07:36 回复(1)
1)二进制转十六进制
将一个二进制数转换成十六进制数的方法是将二进制数的整数部分和小数部分分别进行转换,即以小数点为界,整数部分从小数点开始往左数,每4位分成一组,当最左边的数不足4位时,可根据需要在数的最左边添加若干个“0”以补足4位;对于小数部分,从小数点开始往右数,每4位分成一组,当最右边的数不足4位时,可根据需要在数的最右边添加若干个“0”以补足4位,最终使二进制数的总的位数是4的倍数,然后用相应的十六进制数取而代之。

2)十六进制数转换为二进制数

要将十六进制数转换成二进制数,只要将1位十六进制数写成4位二进制数,然后将整数部分最左边的“0”和小数部分最右边的“0”去掉即可。
b << 8 = 0x5200
左移八位对于十六进制表现为向左移动两位
val = 0x5200 | 0x48 = 0x5248
再做位或操作,有1出1,全零出0
0x5248 = 21064
最后把十六进制转为十进制
发表于 2018-06-04 09:19:30 回复(0)
0x52表示成十进制为82,左移8位,所以乘以2^8,低8位补0;
0X48表示成十进制为72,补齐高8位为0;
按位与,只要有1个1就为1,所以实际上就是把b的高八位与a的第八位连起来。
此时组成的数字十进制为82*2^8+72=21064
发表于 2020-06-06 17:08:16 回复(0)
,表达式中变量计算前会进行提升
发表于 2019-11-12 08:59:30 回复(0)
在b移位前进行了类型转换,将char转换成int然后移位
发表于 2016-07-31 13:23:59 回复(0)
注意<<运算符的优先级高于|,左移8位,相当于16位的两位。

注意数据的总长度与操作系统相关,会不会移出去截断,要看操作系统。
发表于 2016-05-18 17:15:50 回复(0)
我以为会考越界。。。看来还没入行啊。。
发表于 2016-05-12 09:02:35 回复(1)
按位或
发表于 2020-09-16 09:27:57 回复(0)
后面两个解答才是应该赞的啊
发表于 2019-11-16 11:12:18 回复(0)
4位二进制相当于1位16进制,二进制的左移8位相当于16进制的左移2位(8/4),0x52左移就相当于在右侧补0,所以是0x5200
发表于 2019-10-24 08:46:09 回复(0)

char只有一个字节,没有提前类型转换,所以选的72


发表于 2018-07-05 09:18:43 回复(0)
原来是考运算符等级!
发表于 2018-01-21 19:57:45 回复(0)
操作符讲解
| 是对二进制求或操作,只要其中有一个1,则结果的该位就为1;&相反;>> 二进制右移操作;<< 二进制左移操作。
发表于 2017-08-05 19:49:57 回复(0)
0X5248的十进制的值就是答案
发表于 2017-05-08 22:24:49 回复(0)
注意在转化到十进制时,每一位都对各位有贡献,需要使用十六进制展开
发表于 2017-04-13 15:40:09 回复(0)
提升成int
发表于 2017-03-15 23:05:13 回复(0)
默认类型转换
发表于 2016-10-04 00:23:07 回复(0)