社区
C语言
帖子详情
char ch = -1; printf("%x\n", ch); 为什么输出8个f呢,不是就一个字节吗?
小水晶
2007-10-25 12:38:33
char ch = -1;
printf("%x\n", ch);
这样输出会是ffffffff,32个字节
可如果printf("%x\n", (unsigned char)ch);就是ff
请问这是怎么回事?
...全文
1725
7
打赏
收藏
char ch = -1; printf("%x\n", ch); 为什么输出8个f呢,不是就一个字节吗?
char ch = -1; printf("%x\n", ch); 这样输出会是ffffffff,32个字节 可如果printf("%x\n", (unsigned char)ch);就是ff 请问这是怎么回事?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zzyjsjcom
2007-10-25
打赏
举报
回复
friend up
ccyingfu
2007-10-25
打赏
举报
回复
明白了 %x 是按int型输出的
HW121
2007-10-25
打赏
举报
回复
printf("%x\n", ch); 其中%x 表示无符号十六进制的整数,
多长取决你的编译系统,而非ch的类型,会将ch转成无符号十六进制的整数输出。
如果想按多长整数输出前面再加 h | l | ll | I | I32 | I64 ,
printf("%hx\n", ch); h(short) 表示 16位整数.
raptormk16
2007-10-25
打赏
举报
回复
第二个参数是根据格式化字符来进行转换的,一般为int,有些为double,看MSDN
zhangyanli
2007-10-25
打赏
举报
回复
printf();函数只识别第一个参数,即格式字符串,对于后一个参数,如你不指定,则当作32位的int来处理.
此时进行符号扩展,变成32位,如上所得.
printf("%x\n", (unsigned char)ch);同样是上面的原因.你把他当作signed char定义,可是输出时转化为unsigned
故输出8位.(-1的机内补码表示为全1,即ffffffffH)
建议楼住找点资料好好看看printf,sprintf,他们经常导致这些莫名其妙的错误.
珍惜生命远离CPP
2007-10-25
打赏
举报
回复
先扩展为int 那么对应的就是 int类型的 -1;
然后输出
ccyingfu
2007-10-25
打赏
举报
回复
char ch = -1;
printf("%x\n", ch);
//输出ffffffff,是4个字节32位,最高位是1,说明是负数.
printf("%x\n", (unsigned char)ch);
//unsigned char是将ch强制类型转换,char本身是1个字节的,所以输出ff
//无符号ff的十进制是255
ps:初学不知道对不
MySQL 数据类型和运算符
Re: MySQL 数据类型和运算符=============================# 数据类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种 FLOAT DOUBLE DECIMAL 日期与时间数据类型:五种 YEAR -1 字符串类型:二种
CH
AR
(M) VAR
CH
AR
(M) -1 二进制字符串:位字段BIT 固定BINARY 可变VARBINARY -1 # 运算符 算术 运算符 比较 运算符 逻辑 运算符 位操作 运算符 运算符的优先级-------------------------------------
main(){ short i = -1;
printf
(“%d,%o,%x,%u\n“, i, i, i, i); }
代码如下: #include <stdio.h> main(){ short i = -1;
printf
("%d,%o,%x,%u\n", i, i, i, i); } 1.-1用8进制或16进制表示都是-1; 2.但在计算机内部,占用1
字节
空间的情况下(
字节
型),-1的2进制表示为:原码[-1]=10000001;反码为:[-1]=11111110;补码为[-1]=11111111.而计算机内部数值都是以补码的形式进行标识,若以8进制表示就是3ff;16进制为ff 若将-1看成整型,那
C中
Ch
ar
类型 ----%d %c
Ch
ar
字符型,占用
一个
字节
,可以存放本地字符集中的
一个
字符默认情况下是 signed
ch
ar
类型—表示范围: -128 ~+127Unsigned
ch
ar
类型表示范围: 0 ~ 255实例一:#includeint main(){
ch
ar
ch
;scanf("%d" ,&
ch
);
printf
("%d /n" ,
ch
);
printf
("%c /n" ,
ch
);return 0;}结果:解释:在上述这段代码中,从键盘输入的数是作为
一个
int类型存放到变量
ch
中的,所以
printf
("%d /n" ,
关于unsigned
ch
ar
、unsigned short使用
printf
(“%d”)进行
输出
的结果
参考博客:C语言 unsigned 和 signed 类型相互转换深入理解 参考博客:unsigned和signed 对于unsigned 无符号数据类型是不应该向其赋值负数的,但是如果赋值了那会怎么样呢? #include #include int main() { unsigned
ch
ar
uc= -1; unsigned short us=-1; unsigned in
ch
ar
c=128;
printf
("%d",c);问题
一、文章来由同属计算机储存,补码问题的延生~~二、解密答案
输出
是-128,为什么呢?
ch
ar
型变量c中存储的是128的补码:10000000。上一篇文章已经说到,对于计算机来说,存储的都是数据的补码。赋值给
ch
ar
型,debug模式下反汇编如下:
ch
ar
c = 128; 00C6446E mov byte ptr [c],80h
ch
ar
cc = c; 00C6447
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章