对于赋值,我正在尝试在C中创建一些仅使用位操作来测试整数是否为ASCII大写字母的代码.该字母将由整数形式的ASCII代码给出,意思是0x41 <= ourint <= 0x5A.在做了一些研究后,我了解到小写字母和大写字母之间的区别是单词二进制版本的第六位数.大写有一个1和更低的有一个0.
我几乎拥有它,但我的代码不起作用.
到目前为止我所拥有的是什么
!(((x>>6)<<31) & 0)
Run Code Online (Sandbox Code Playgroud)
它的作用是将代码移动到右边6以获得第六个数字作为第一个数字,然后向右移动31以使其全部为0或1然后是31 0.我必须这样做,如果它是大写的,它返回1,所以我使用感叹号.
编辑:我的新代码是
!((~(((x & 32)>>5))<<31))>>31)
Run Code Online (Sandbox Code Playgroud)
但现在我仍然坚持测试的问题 0x7fffffff
c ×1