关于C中位域的赋值问题 [color=Red](新人)[/color]
按理来说一个字节是8位,一个整型变量占4个字节也就是32位为什么一个4位的位域变量能存放值为15的整型?
代码如下:
#include<stdio.h>
void main(){
struct bs{
unsigned a:1;
unsigned b:3;
unsigned c:4;
} bit,*pbit;
bit.a=1; /* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
bit.b=7; /* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
bit.c=15; /* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
printf("%d,%d,%d\n",bit.a,bit.b,bit.c); /* 以整型量格式输出三个域的内容 */
pbit=&bit; /* 把位域变量 bit 的地址送给指针变量 pbit */
pbit->a=0; /* 用指针方式给位域 a 重新赋值,赋为 0 */
pbit->b&=3; /* 使用了复合的位运算符 "&=",相当于:pbit->b=pbit->b&3,位域 b 中原有值为 7,与 3 作按位与运算的结果为 3(111&011=011,十进制值为 3) */
pbit->c|=1; /* 使用了复合位运算符"|=",相当于:pbit->c=pbit->c|1,其结果为 15 */
printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c); /* 用指针方式输出了这三个域的值 */
} int型整数是32bit,这里的15转换成二进制是 1111, 占了4个bit 因为一个字节至少是8bit,一个内存单元就是一个字节,所以一个内存单元(1字节)就是他最小单位,
所以编译器编译的时候这个结构体的大小实际上是一个字节(8bit),所以剩下的4bit可以存储15这个整数 newu 发表于 2019-6-22 16:29
因为一个字节至少是8bit,一个内存单元就是一个字节,所以一个内存单元(1字节)就是他最小单位,
所以编 ...
一个整数是32bit啊,4bit怎么存进去的呢? newu 发表于 2019-6-22 22:15
int型整数是32bit,这里的15转换成二进制是 1111, 占了4个bit
啊 明白了谢谢 newu 发表于 2019-6-22 22:15
int型整数是32bit,这里的15转换成二进制是 1111, 占了4个bit
您能再回答我一个问题吗?
int a=201,b=012;
printf("%2d,%2d\n",a,b);
上述代码为什么结果是201和10 dapeng_c 发表于 2019-6-25 15:11
您能再回答我一个问题吗?
int a=201,b=012;
因为前边加个0表示的是八进制的12,输出的是十进制,所以结果是10 newu 发表于 2019-6-25 15:18
因为前边加个0表示的是八进制的12,输出的是十进制,所以结果是10
书上都是按照16位来算,如果我按32位来算答案会不会被当做错误答案,影响我的成绩?
比如书上输出(八进制)-14是177762(16位),而我的电脑37777777762(32位) newu 发表于 2019-6-25 15:18
因为前边加个0表示的是八进制的12,输出的是十进制,所以结果是10
还有书上输出(指数)3.5是3.50000e+00(小数点后5位,e后3位)
而我的电脑是3.5000000e+000(小数点后6位,e后4位)
我过几天要参加专接本的考试,我按我电脑的输出来填答案会被当做错误答案吗? dapeng_c 发表于 2019-6-25 16:19
书上都是按照16位来算,如果我按32位来算答案会不会被当做错误答案,影响我的成绩?
比如书上输出(八进 ...
是答题系统吗?问问老师吧{:10_266:} newu 发表于 2019-6-25 15:18
因为前边加个0表示的是八进制的12,输出的是十进制,所以结果是10
还有书上输出指数)3.5是3.50000e+00(小数点后5位,e后3位),而我的电脑是3.5000000e+000(小数点后6位,e后4位);我过几天要参加专接本的考试,我按我电脑的输出来填答案会被当做错误答案吗? newu 发表于 2019-6-25 16:20
是答题系统吗?问问老师吧
不是,我过几天要参加专接本的考试 newu 发表于 2019-6-25 16:20
是答题系统吗?问问老师吧
不是,我过几天要参加专接本的专业考试(不知道为什么老是回复了却消失了,要回复几遍才行一次,好烦)
页:
[1]