数据使用右移运算符出错
本帖最后由 一笔长空 于 2024-4-12 23:08 编辑代码如下。IDKEY这个数组是unsigned char类型,要对0XDF这个数据进行运算,<<2*3/2都没有问题运算完之后是0x3A;0011 1010,但进行右移一位后变成了1001 1101;
这就奇怪了,右移运算符不是高位补0吗,现在怎么成补1了,我没用循环右移啊,请教老师解答,感谢!
是这个1过去了,你可以右移前强制类型转换一下 keil的常数在没有强制指定类型前默认都是int类型,所以会产生你上面的结果
如果想当作unsigned char类型操作,则需要进行强制类型转换
x = (unsigned char)(((0xdf << 2) * 3) / 2) >> 1;
kaily 发表于 2024-4-13 11:27
keil的常数在没有强制指定类型前默认都是int类型,所以会产生你上面的结果
如果想当作unsigned char类型操 ...
明白了,非常感谢您的解答, 本帖最后由 一笔长空 于 2024-4-13 11:48 编辑
jwd 发表于 2024-4-13 06:10
是这个1过去了,你可以右移前强制类型转换一下
感谢您的解答,学习了,另外您这个计算器是在哪里下载或者打开,看着还挺好用,Windows自带的不太好 楼上说的好,c语言的细节应用我们还需要多学习啊 一笔长空 发表于 2024-4-13 11:47
感谢您的解答,学习了,另外您这个计算器是在哪里下载或者打开,看着还挺好用,Windows自带的不太好 ...
这就是win10(11)自带的计算器啊 jwd 发表于 2024-4-13 13:20
这就是win10(11)自带的计算器啊
好的我的是win7,再次感谢您的解答,又学习到了新知识,非常感谢 C语言的类型转换挺复杂的 lezjin 发表于 2024-4-13 13:44
C语言的类型转换挺复杂的
我这回又学习到了
页:
[1]