- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我左移一个有符号的字符时,我不认为我完全理解 c 编译器中发生的事情。我用值 0x8d << 3 初始化它,它给了我一个警告:隐式常量转换溢出。我假设这是因为它为 char 提供了太大的值,但是当我手动完成时,我得到 104 作为答案。
这是否意味着当值被转移时它正在做
10001101 << 3 = 10001101000
而不是
10001101 << 3 = 01101000
想通了,但这是代码:
signed char testChar = 0x8d << 3;
printf("testChar : %d\n", testChar);
只需正常初始化它,然后将其转移到另一条线上, super 简单的东西。
最佳答案
你的问题很困惑:你是在用值 0x8d << 3
初始化一个有符号的字符吗? ?这显然是实现定义,因为该值超出了类型的范围并且该类型已签名。编译器发出警告,因为精度损失是明确的。
相反,如果您的意思是左移一个带符号的字符,左移一个值为0x8d
的带符号的字符。 , 这又是不正确的:除非 char
超过 8 位,则带符号的 char 的值不能为 0x8d。它的值可以是 -115
具有相同的位模式。左移将以这种方式计算:
char
值首先提升为int
.int
value 左移 3 but positions: 这相当于乘以 8。结果值为 -920
.此值不适合 char
.将其存储到 char
是实现定义的。最有可能的结果是 char
104
的值.
编辑
您发布了实际代码:
signed char testChar = 0x8d << 3;
printf("testChar : %d\n", testChar);
如果char
是 8 位,分配具有实现定义的行为,因为 1128
超出类型 signed char
的范围(-128..127),大多数现代处理器的行为是屏蔽掉高位并将 8 个低位存储到目标字节中,就好像它是一个 unsigned char
。 .在您的情况下,结果是 1128 & 255
-> 104
.
关于c - 左移溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214014/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!