c - unsigned char 的大小是 8 位,但为什么我可以将它(左或右)移动或最多 31 位?
问题描述
所以这是我的代码
#include <stdio.h>
int main(void) {
unsigned char ch = 244;
ch = ch << 31;
return 0;
}
我最多可以移动ch
31 位,这意味着ch
32 位,但是如何?
sizeof(ch)
也只有 1 个字节。
解决方案
[...] 这意味着
ch
是 32 位 [...] ?
它不是。类型为 的移位结果int
在分配回 时被截断为 8 位ch
。
您可以通过检查 的值来验证这一点ch
。
gcc
发现这个如果-Wconversion
打开:
$ gcc -Wconversion test.c
test.c:4:13: warning: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Wconversion]
ch = ch << 31;
~ ~~~^~~~~
1 warning generated.
推荐阅读
- node.js - 如何在sequelize中关联表
- c# - 将按钮插入 NavigationViewItem UWP
- wpf - 设置 WPFToolkit AutoCompleteBox
- web-applications - 如何在移动设备上使用身份验证器应用程序期间保留 Web 应用程序中的状态
- c++ - return 语句中的 C++ constexpr 函数
- tx-news - tx_news n:link 不想用 config.absPrefix 建立绝对链接
- php - recaptcha 身份验证后如何将 POST 数据传递到外部站点?
- spring - 打包操作是否构建项目?
- c# - PushButtonState.Default 和 PushButtonState.Normal 之间的逻辑区别是什么?
- css - 如何在引导程序中正确对齐?