首页 > 试题广场 >

已知int占4个字节,unsigned char 占1个字节

[不定项选择题]
已知int占4个字节,unsigned char占1个字节。 unsigned int number = 0xffaabcdd;,以下可以将number的值变为0xffaacddd的方式有()
  • *((unsigned char *)(&number) + 1) = 0xcd;
  • number = (number & 0xffff00ff) | 0x00cd00;
  • number = (number & 0xffee43dd) | 0xbbaacddd;
  • number = (number & 0xffccbcff) + 0x1100;
一开始也想选A,但不知道大佬们有没有考虑大端存储和小端存储对本题带来的影响?
发表于 2019-07-05 20:55:30 回复(13)
int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃
所以
(unsigned char*)(&number)为指向oxdd的指针
(unsigned char*)(&number)+1为指向oxbc的指针
发表于 2019-07-29 21:40:32 回复(1)
发表于 2019-07-02 21:21:21 回复(2)
C考得有啥意义
发表于 2021-04-02 21:03:23 回复(0)
大小端和c语言没关系,只和设备架构有关系,例如x86、ARM小端,IBM、c51大端。还有些三星的ARM处理器可以通过一个引脚电平决定大小端。
发表于 2021-11-25 21:00:39 回复(0)

题目中给出了一个 unsigned int 类型的数字 number,其十六进制表示为 0xffaabcdd。现在需要将这个数的值变为 0xffaacddd。

因为 unsigned char 占 1 个字节,因此可以考虑使用位运算和强制类型转换的方法来实现对 number 的修改。

B. number = (number & 0xffff00ff) | 0x00cd00;

首先,通过按位与运算和按位或运算来修改 number 的值:

  • 0xffff00ff 表示将 number 的第二个字节(16 到 23 位)清零,保留其他位不变;
  • 0x00cd00 表示将要修改的值,其中 0x00 表示 number 的第三个字节(8 到 15 位)被清零,0xcd 表示将其修改为 0xcd。

因此,执行完上述语句之后,number 的值变为 0xffaacddd,达到了题目的要求。

C. number = (number & 0xffee43dd) | 0xbbaacddd;

首先,通过按位与运算和按位或运算来修改 number 的值:

  • 0xffee43dd 表示将 number 的第一和第四个字节(0 到 7 位和 24 到 31 位)清零,保留其他位不变;
  • 0xbbaacddd 表示将要修改的值,其中 0xbb 和 0xdd 分别表示 number 的第一和第四个字节被修改为 0xbb 和 0xdd。

因此,执行完上述语句之后,number 的值变为 0xffaacddd,同样达到了题目的要求。

A. *((unsigned char *)(&number) + 1) = 0xcd;

首先,将 number 的地址强制转换为 unsigned char 指针类型,并加上 1 个偏移量,定位到 number 的第二个字节。然后,将这个指针所指向的值修改为 0xcd。

虽然这种方法也可以修改 number 的值,但是题目要求的是将 number 的值变为 0xffaacddd,而这种方法只能修改其中一个字节,无法满足题目要求。

D. number = (number & 0xffccbcff) + 0x1100;

首先,通过按位与运算和加法运算来修改 number 的值:

  • 0xffccbcff 表示将 number 的第二和第三个字节(8 到 23 位)清零,保留其他位不变;
  • 0x1100 表示将要增加的值,其中 0x11 表示 number 的第三个字节需要加上 0x11。

虽然这种方法也可以修改 number 的值,但是题目要求的是将 number 的值变为 0xffaacddd,而这种方法仅仅是将 number 的第三个字节增加了 0x11,无法满足题目要求。

发表于 2023-10-14 20:37:02 回复(0)
大端模式,低字节存放在高地址中;小端模式,高字节存放在低字节中。c语言默认是小端
编辑于 2019-09-01 09:50:54 回复(2)
特么C是对的对的对的!!!!!
我又手算了一遍!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
发表于 2019-07-19 22:43:59 回复(0)
BC手算了一遍 D用的电脑自带的计算器 A 绘图得出


编辑于 2023-08-28 21:27:09 回复(0)

注意大端和小端存储

编辑于 2022-06-23 13:15:20 回复(0)
好难呀CPU烧了
发表于 2023-10-22 01:20:05 回复(0)
这是什么知识点吗?没看懂
发表于 2023-09-15 15:42:57 回复(0)
我为啥要选A啊,没想大端序还是小端序,BC到自己算出来了
发表于 2023-08-01 15:04:56 回复(0)
]]]头像 ]]]
pc机一般都是小端吧

发表于 2023-02-17 20:28:56 回复(0)
什么破题
发表于 2023-01-03 19:13:39 回复(0)
还好我不熟,只想到了大端存储哈哈
发表于 2022-07-15 20:07:09 回复(0)
A为什么不对,有朋友可以讲解一下吗
发表于 2021-12-11 01:22:31 回复(1)
BCD用电脑带的计算器算的。😂
发表于 2020-06-14 21:23:33 回复(0)