gpt4 book ai didi

c++ - 有什么理由更喜欢有符号或无符号整数来表示位列表吗?

转载 作者:行者123 更新时间:2023-12-03 06:58:53 25 4
gpt4 key购买 nike

有没有理由更喜欢有符号或无符号整数来表示位列表?
我相信人们倾向于更多地使用unsigned:例如,C++的bitsetunsigned long相互转换。
这是一个任意决定,还是unsigned更好?

最佳答案

最好将无符号类型用于表示位的整数。您经常在这些整数上使用位移运算符<<>>,并且这些运算符对无符号整数具有明确定义的行为(前提是您位移的位数不超过位数或为负数)。
如果在带符号整数上使用<<>>,则如果将值1的位移入或移出符号位,则前者将为undefined behavior,而后者将实现定义为负值。
C standard的6.5.7 p4和p5部分对此进行了说明:

4 The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with zeros. IfE1has anunsigned type, the value of the result is E1×2E2,reduced modulo one more than the maximum value representablein the result type. If E1 has a signedtype and nonnegativevalue, and E1×2E2 is representable in the resulttype, then that is the resulting value; otherwise, the behavior isundefined.

5 The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type or if E1 has a signed type and anonnegative value, the value of the result is the integral part ofthe quotient of E1/2E2. If E1 has a signed type anda negative value, the resulting value is implementation-defined.


但是,您需要注意的一件事是使用小于 int的无符号类型。这是因为在表达式中使用这些类型的值时,它们将被提升为 int

关于c++ - 有什么理由更喜欢有符号或无符号整数来表示位列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64164453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com