avatar
一个integer promotion问题# Programming - 葵花宝典
e*y
1
各位朋友,LD的妈妈前两天因为乳腺增生作了切除术,后来又说是乳腺癌,还得做化疗
,LD很着急,问我美国有没有什么营养品可以买的。我也不懂啊,查了查,关于那些抗
氧化剂有说有用的,有说又会影响化疗效果的,不知道版上有没有懂得朋友给指点一下
啊。那个CoQ10还有花旗参可以吃吗?或者有没有特别需要补充的?多谢多谢!!
avatar
K*h
2
填0还是扣的州税呀?大家帮忙看看,我是新手,不太明白
avatar
l*g
3
要下雪了吧?
这里,要下雪了吧?
每年的这个时候,我都会莫名的伤感。
我小的时候,东北要比现在冷得多。外面刮着大烟泡。
热热的炕头上,有我姥。她抚摸着我的头说:孩儿,长大了,去留洋。
: 留洋,那是哪?
:在地球的那一头。要坐船,很大的船。
:那是哪?
:大不列颠。
我哭着闹着:那...姥,你去吗? 你去,我就去。
那年,我四五岁。
姥,我今天就在你说的那个留洋的地方。我多想在你的怀抱里,哭着闹着。
姥,我想你。
快下雪了。我想,是快了...
avatar
s*k
4
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?
avatar
s*u
5
一般情况下,填09年的州税,参考instruction

【在 K*******h 的大作中提到】
: 填0还是扣的州税呀?大家帮忙看看,我是新手,不太明白
avatar
t*t
6
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?

avatar
K*h
7
多谢
avatar
s*k
8
我也觉得你的这个是对的。跑了一下也是
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.

avatar
s*k
9
比如
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.

avatar
t*t
10
你如果非要用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?

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

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

avatar
t*t
12
错的明明是你, 这里面说得很清楚:
"... 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.
: 十分不解,看来这个是错的。

avatar
s*k
13
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是不对的, 符号难道不算精度么.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。