由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一个integer promotion问题
相关主题
经典题atoi的溢出处理 (转载)借人气问个c++的overflow (转载)
unsigned 8bit integer转换成signed 16bit应该是什么结果?unsigned int subtract int
真是奇了怪了,VC编译器问题?new了指针,delete的时候出错了
pointer overflow[转载] Re: 问个土问题吧
a question about bitwise operationlittle endian vs big endian
unsigned long long来来来,我也问个题 (转载)
INTEGER搜索求建议一个hash table的简单问题
[合集] 编译报错stack overflow,到底来自何处急问:这个为什么不行?
相关话题的讨论汇总
话题: max话题: uint话题: unsigned话题: uchar话题: uc
进入Programming版参与讨论
1 (共1页)
s********k
发帖数: 6180
1
signed char sc = SCHAR_MAX;
unsigned char uc = UCHAR_MAX;
signed long long sll = sc + uc;
这个里面signed被promotion到unsigned,但是uc也要被conversion(UCHAR_MAX to
UINT_MAX),为什么uc也要被conversion到UINT_MAX呢?这个计算最后会overflow?
t****t
发帖数: 6806
2
Only types are promoted, values are not. for arithmetic operators, if none
of the operands is floating point, integral promotion will be performed
first, in your case both operands are promoted to int. so the result shall
be SCHAR_MAX+UCHAR_MAX = 127+255=382.

【在 s********k 的大作中提到】
: signed char sc = SCHAR_MAX;
: unsigned char uc = UCHAR_MAX;
: signed long long sll = sc + uc;
: 这个里面signed被promotion到unsigned,但是uc也要被conversion(UCHAR_MAX to
: UINT_MAX),为什么uc也要被conversion到UINT_MAX呢?这个计算最后会overflow?

s********k
发帖数: 6180
3
我也觉得你的这个是对的。跑了一下也是
https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+
Understand+integer+conversion+rules
我是看这个链接,里面说
because uc is equal to UCHAR_MAX, which is equal to UINT_MAX, the addition
results in an overflow in this example.
十分不解,看来这个是错的。

【在 t****t 的大作中提到】
: Only types are promoted, values are not. for arithmetic operators, if none
: of the operands is floating point, integral promotion will be performed
: first, in your case both operands are promoted to int. so the result shall
: be SCHAR_MAX+UCHAR_MAX = 127+255=382.

s********k
发帖数: 6180
4
比如
unsigned int a = 2;
int b = -3;
做 a+b.
-2会被convert成0x11111101,a+b会overflow结果是UINT_MAX?

【在 t****t 的大作中提到】
: Only types are promoted, values are not. for arithmetic operators, if none
: of the operands is floating point, integral promotion will be performed
: first, in your case both operands are promoted to int. so the result shall
: be SCHAR_MAX+UCHAR_MAX = 127+255=382.

t****t
发帖数: 6806
5
你如果非要用unsigned来表示-1, 那不就是UINT_MAX吗? 如果你把UINT_MAX赋给一个
signed int, 不就又回到-1了吗?
而且这跟你先前提的问题没有关系啊.

【在 s********k 的大作中提到】
: 比如
: unsigned int a = 2;
: int b = -3;
: 做 a+b.
: -2会被convert成0x11111101,a+b会overflow结果是UINT_MAX?

s********k
发帖数: 6180
6
这个跟我前面问题没关系,这个就是我随便举的一个例子,那个是链接里面直接把
Unsigned char promote 成unsigned INT,我指的的value。还是一个貌似权威的网站

【在 t****t 的大作中提到】
: 你如果非要用unsigned来表示-1, 那不就是UINT_MAX吗? 如果你把UINT_MAX赋给一个
: signed int, 不就又回到-1了吗?
: 而且这跟你先前提的问题没有关系啊.

t****t
发帖数: 6806
7
错的明明是你, 这里面说得很清楚:
"... However, if the compiler represents the signed char and unsigned char
types using 31- and 32-bit precision (respectively), ..."
有个大大的IF, 你不看的吗?
当然, 这里面说signed char是7bit precision是不对的, 符号难道不算精度么.

【在 s********k 的大作中提到】
: 我也觉得你的这个是对的。跑了一下也是
: https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+
: Understand+integer+conversion+rules
: 我是看这个链接,里面说
: because uc is equal to UCHAR_MAX, which is equal to UINT_MAX, the addition
: results in an overflow in this example.
: 十分不解,看来这个是错的。

s********k
发帖数: 6180
8
you are right.我土了

【在 t****t 的大作中提到】
: 错的明明是你, 这里面说得很清楚:
: "... However, if the compiler represents the signed char and unsigned char
: types using 31- and 32-bit precision (respectively), ..."
: 有个大大的IF, 你不看的吗?
: 当然, 这里面说signed char是7bit precision是不对的, 符号难道不算精度么.

1 (共1页)
进入Programming版参与讨论
相关主题
急问:这个为什么不行?a question about bitwise operation
有人发过的一个面试题unsigned long long
question about shiftINTEGER搜索求建议
[合集] visual c++中读二进制图形文件的奇怪问题[合集] 编译报错stack overflow,到底来自何处
经典题atoi的溢出处理 (转载)借人气问个c++的overflow (转载)
unsigned 8bit integer转换成signed 16bit应该是什么结果?unsigned int subtract int
真是奇了怪了,VC编译器问题?new了指针,delete的时候出错了
pointer overflow[转载] Re: 问个土问题吧
相关话题的讨论汇总
话题: max话题: uint话题: unsigned话题: uchar话题: uc