搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ char -128的整型提升为什么和一般的不一样?
标题:
char -128的整型提升为什么和一般的不一样?
只看楼主
coter123
等 级:
新手上路
帖 子:4
专家分:0
注 册:2023-2-18
结帖率:
0
楼主
已结贴
√
问题点数:20 回复次数:4
char -128的整型提升为什么和一般的不一样?
char a= -128;
printf("%u",a);
-128 补码:10000001
整型提升后应是:11111111 11111111 11111111 10000001 =4294967169
系统算出来却是4294967168
把char类型换成short,结果也是这个
为什么呢?麻烦大佬解释下
搜索更多相关主题的帖子:
short
整型
结果
char
类型
2023-02-18 12:45
rjsp
等 级:
版主
威 望:
507
帖 子:8890
专家分:53117
注 册:2011-1-18
第
2
楼
得分:7
首先 char 是否 具符号 属于 实现定义。一般而言,vc默认char具符号,gcc默认char无符号。
从你的现象来看,你用的是 char具符号 的编译器。
要尽量保证 负值的char 在进行类型提升后 它的值依然保持不变,那么 10000000(8bits的具符号类型,值-128) 变为 11111111 11111111 11111111 10000000(32bits的具符号类型,值-128) 有什么不对?
你的问题在于,把 -128(signed int)强制转化成 unsigned int 类型,那么 11111111 11111111 11111111 10000000 当成 无符号整型看待,它就是 4294967168,也没有什么不对
总之,你应该用
char a= -128;
printf("%d",a);
而不是 %u
2023-02-18 16:27
coter123
等 级:
新手上路
帖 子:4
专家分:0
注 册:2023-2-18
第
3
楼
得分:0
回复 2楼 rjsp
好的,谢谢!
2023-02-19 08:46
laike23
等 级:
新手上路
帖 子:1
专家分:7
注 册:2023-2-20
第
4
楼
得分:7
2023-02-20 15:45
forever74
来 自:CC
等 级:
贵宾
威 望:
49
帖 子:1636
专家分:3940
注 册:2007-12-27
第
5
楼
得分:7
以下是引用
rjsp
在2023-2-18 16:27:05的发言:
首先 char 是否 具符号 属于 实现定义。一般而言,vc默认char具符号,gcc默认char无符号。
从你的现象来看,你用的是 char具符号 的编译器。
要尽量保证 负值的char 在进行类型提升后 它的值依然保持不变,那么 10000000(8bits的具符号类型,值-128) 变为 11111111 11111111 11111111 10000000(32bits的具符号类型,值-128) 有什么不对?
你的问题在于,把 -128(signed int)强制转化成 unsigned int 类型,那么 11111111 11111111 11111111 10000000 当成 无符号整型看待,它就是 4294967168,也没有什么不对
总之,你应该用
char a= -128;
printf("%d",a);
而不是 %u
楼主主要的问题在于把-128的二进制形式写错了一位。
收到的鲜花
rjsp
于
2023-02-21 10:44
送鲜花
10朵 附言:确实,我粗心了
对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2023-02-21 09:27
5
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-511330-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.756025 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved