我有一些代码,简化后基本上就是这个
unsigned char a=255;
unsigned char b=0;
while (a+1==b) {//do something}
现在,由于255+1=0带有无符号字符,我本希望它能做点什么,但它没有,因为它将所有内容都提升为int。我可以通过用(unsigned char)(a+1)
或(a+1)%256
替换a+1
来实现它。
告诉编译器我不希望更改类型的最佳方式是什么?还是我应该只做我知道有效的方法之一?
根据这个cppreference.com页面,"算术运算符不接受小于int的类型作为参数"也就是说,您提出的(unsigned char)(a + 1)
解决方案足以阻止此升级,并且a
将回滚到0。使用模运算符更明确,但它在机器代码中引入了一个额外的操作。这是清晰度和性能之间的平衡。