我刚刚开始阅读ISO C 2011标准,以及它的最后公开草案[1] ,并意识到在C词汇语法[1] [458ff。]中所有(字面)数字常数都是无符号的。
这是否意味着编译器将带符号的数值常量(如-5.1E10或-1)解释为相应的一元运算符的调用? 例如-1 – (1),+ 512 +(512)
更新:我的错,“所有(文字)数字常数都是无符号的”我的意思是“所有(文字)数值常数都是非负的”
请注意,托马斯
所有非后缀十进制整数文字都是有符号的,但它们不能为负数。 也许非负面的是你所说的“无符号”,但我认为区分是很重要的 – 它们不是unsigned int
类型。
一旦获得正数字,就会应用一元运算符。 这就是为什么INT_MIN
通常被定义为:
#define INT_MIN (-2147483647 - 1)
因为您无法在此平台上使用signed int
表示2147483648。
是的,您的解释是正确的,所有数字文字都不包含符号,最终符号是应用于它的一元运算符。
选择文字的类型,使得文字的值可以在该类型中表示,因此有效的有效数字文字总是表示正值。
all(literal)数值常量是无符号的。
这是错误的,实际上只有非前缀十进制整数文字被签名。 其他整数文字是无符号或有符号的。
这是否意味着编译器将带符号的数值常量(如-5.1E10或-1)解释为相应的一元运算符的调用? 例如-1 <=> – (1),+ 512 <=> +(512)
如果将-
应用于无符号文字,其结果(通常)仍未签名。 例如:
-1U // unsigned quantity -0xFFFFFFFF // unsigned quantity (assuming 32-bit int)
签名结果通过C整数转换规则转换为无符号。
以上就是c/c++开发分享ISO C和签名的文字常量相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/541696.html