鱼C论坛

 找回密码
 立即注册
查看: 1111|回复: 5

C,D,E三项不是很明白,麻烦有大哥解释一下原理

[复制链接]
发表于 2021-11-28 23:05:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是带你学C带你飞的第七集取值范围的最后一道选择题(原本应该是填空题来着)。
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-28 23:27:55 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-28 23:48 编辑

        左边的数据类型是 char ,右边是 unsigned char,同一个字节,在 0 ~ 127 的范围内,char 和 unsigned char 数值重合相等,出了这个范围,char 会进入 -128 ~ -1,而 unsigned char 则会相应进入 128 ~ 255。所以,同一个字节,按 char 和 按 unsigned char 解释,可能会得到完全不同的数值,在数值运算中的表现也会完全不同。本例的 A、B就属于 char 与 unsigned char 数值相等重合,而 C、D、E 则属于二者分道扬镳时的情形。
        参考下面的代码也许可以加深理解:
#include <stdio.h>

int main(void)
{
        char a = 13 , b = 122 , c = -1 , d = -14 , e = -128 ;
        printf("A. %d -> %u\n" , a , a & 0xff)              ;
        printf("B. %d -> %u\n" , b , b & 0xff)              ;
        printf("C. %d -> %u\n" , c , c & 0xff)              ;
        printf("D. %d -> %u\n" , d , d & 0xff)              ;
        printf("E. %d -> %u\n" , e , e & 0xff)              ;
}
        编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
A. 13 -> 13
B. 122 -> 122
C. -1 -> 255
D. -14 -> 242
E. -128 -> 128

D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-28 23:54:21 | 显示全部楼层
主要是D不明白,为什么-14等于10001110,我用进制换算器也算不对
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-29 00:34:44 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-29 00:40 编辑

       你完全搞错了,-14 的十六进制数是 0x100 - 0x0e = 0xf2 二进制表述是 1111 0010
       你图片上的 1000 1110 对应的十六进制数是 0x8e,char 的值是 -114 而 unsigned char 的值是 142。和 D 完全没有任何关系。
       在进制换算器中,对于 D,你应该研究的是 242 。对于其它负值,你的研究对象也都应该是它们所对应的 unsigned char 的数值。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-29 00:47:55 | 显示全部楼层
哦,非常谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-29 01:27:00 | 显示全部楼层

        如果问题已经解决,你应该设置 "最佳答案"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-18 06:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表