C语言,使用共用体和结构体 查看int型的bit分布

代码如下,给a.num赋值255后,a.bits里的b0到b7应该是1,

可结果都是-1 ,为什么?

#include

struct Bit{

short b0 : 1;

short b1 : 1;

short b2 : 1;

short b3 : 1;

short b4 : 1;

short b5 : 1;

short b6 : 1;

short b7 : 1;

short b8 : 1;

short b9 : 1;

short b10 : 1;

short b11 : 1;

short b12 : 1;

short b13 : 1;

short b14 : 1;

short b15 : 1;

short b16 : 1;

short b17 : 1;

short b18 : 1;

short b19 : 1;

short b20 : 1;

short b21 : 1;

short b22 : 1;

short b23 : 1;

short b24 : 1;

short b25 : 1;

short b26 : 1;

short b27 : 1;

short b28 : 1;

short b29 : 1;

short b30 : 1;

short b31 : 1;

};

union Number{

int num;

struct  Bit bits;

};

void main(){

union Number a = { 255 };

getchar();

}

------解决思路----------------------

定义成 unsigned short 就是 1 了

------解决思路----------------------

1 (补码)用来表示1位有符号数,其符号位为1,表示负数。其绝对值为按各位取反后再末位+1,即1取反后为0,0+1=1。

综上所述,1 (补码)用来表示1位有符号数,对应-1

------解决思路----------------------

内存里都是一个 bit 的 1

只是这个 1 按有符号数来解释的话最高位是符号位,这里的最高位就是这个唯一的位了,它是 1 就表示是负数,至于负的多少就是按楼上的补码算法来确定的

------解决思路----------------------

不是“除了符号位什么都没有了,勉为其难 解释为-1”;

而是“其符号位为1,表示负数。其绝对值为按各位(即所有位包括符号位)取反后再末位+1,即1取反后为0,0+1=1。”

------解决思路----------------------

short 拿到的结果应该是 0xFFFF 所以实际上显示为 -1……

像这种结构体位域最好用无符号的

------解决思路----------------------

引用:Quote: 引用:Quote: 引用:Quote: 引用:Quote: 引用:short 拿到的结果应该是 0xFFFF 所以实际上显示为 -1……

像这种结构体位域最好用无符号的

你的回答是错误的,按你的说法,则 b0到b1都应该是-1,而不是只有b0到b7是1了

写错了,应该是"则 b0到b31都应该是-1,而不是只有b0到b7是1了"你赋值只给了个 255 ,才 1 个字节,8 位,怎么可能全都是 -1?

所以说 一个short 只拿到一个 1,而不是 0xFFFF算了,我说的你没看懂,不想解释了。

------解决思路----------------------

位段,按照所有位数计算,最高位是其所有位数中的最高位,而不是类型的最高位。

short  本身是 16Bits,但是你这里 因为是位段,只占1 bit .这个1bit 就是最高位了

由于 没有数据位,只有符号位,所以只能表示 0,-1 两个数

有符号数,是所谓的补码数,最高位 表示符号,

其它位:

正数 用原码,

负数用补码(反码加一)表示。

位段的位数,只要不等于, 类型位数本身,

那么 最高位就只是位段,所有位中的最高位,而不是类型的最高位。

位段的表示方法,和有符号数表示方法,在这点上略有不同,因为位段 和有符号数的位数往往不同。

往往要比有符号数本身的位数少。

------解决思路----------------------

如果依然按照 16Bits short 来表示的话,那就永远没有符号位了

所以 ,有符号位段,实际上是按照位段的位数表示的有符号数,

不是C语言的内部数据类型的有符号数

------解决思路----------------------

位段的数据类型,只是表示该位段参与+-*/等算术运算时,

当作什么类型的整数使用,

以及最多占有多少 Bits,有无符号等等。

最终还是要按照实际占有 Bits多少,来表示和解释的。

------解决思路----------------------

有符号数,是所谓的补码数

最高位表示符号,

若最高位为0,表示正数,其绝对值为所有位包括符号位的原码对应二进制数

若最高位为1,表示负数,其绝对值为所有位包括符号位全部按位取反,再末尾加一后对应的二进制数

c语言 int操作bit,C语言,使用共用体和结构体 查看int型的bit散布相关推荐

  1. C语言中的结构体,结构体中数组初始化与赋值

    最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论: 1.结构体的 ...

  2. C语言之玩转结构体1——结构体定义与声明

    文章目录 一.前言 二.名词解释 三.结构体声明 四.结构体定义及初始化 五.运行 六.结语 一.前言 结构体作为C语言中的重要一环,可以用它来对数据进行封装,把一些相似的成员放在同一个结构体中,其对 ...

  3. 【Go语言刷题篇】Go完结篇|函数、结构体、接口、错误入门学习

    Go从0到入门6-Go完结篇 前言 Q1:函数-数字的阶乘 Q2:函数-绝对值 Q3:函数-加减乘除 Q4:结构体-学生信息1 Q5:结构体-学生信息2 Q6:接口-动物和老虎 Q7:错误-网络延迟 ...

  4. C语言结构体和结构体数组示例 - Win32窗口程序演示

    C语言结构体和结构体数组的使用: /* C结构体和结构体数组示例,by bobo */#include <windows.h>LRESULT CALLBACK WndProc (HWND, ...

  5. 结构体嵌套结构体c语言,结构体的相互嵌套

    编程时要用到C语言中结构体的自引用,由于用的少,学得时候也没在意,趁用到,回忆一下. 结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针. 结构体的相互引用 ...

  6. C语言项目实战:24点游戏计算器(基于结构体、指针、函数、数组、循环等知识点)

    文章目录 C语言项目实战:24点游戏计算器(基于结构体.指针.函数.数组.循环等知识点) 前言:24点游戏计算器的规则如下 一.项目的创建标 1.选择项目 2.输入项目名称和路径 3.创建头文件Mai ...

  7. C语言概述(三)-- 宏定义、指针、结构体

    宏定义 指针 结构体 1.宏定义      #define      每个参数加上括号,结果也加上括号      否则,可能会因为运算的优先级问题导致结果错误 #define ADD(a,b) ((a ...

  8. C语言结构体和结构体指针的简单用法

    C语言结构体和结构体指针的简单用法 这里总结一下自己的学习笔记,关于C语言当中的结构体指针的用法,以及结构体简单使用. 简单介绍一下今天出场的嘉宾–>结构体和结构体指针 什么是结构体: 1,定义 ...

  9. C语言结构体与结构体指针的使用

    C语言结构体与结构体指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识 c语言结构体(struct)是由一系列具有相同类型或不 ...

  10. c语言程序设计 第三版 哈工大,C语言程序设计_哈工大(3):指针与结构体.pdf...

    圳 职 业 技 术 学 院Shenzhen Polytechnic 八单元(3):指针与结构体 教学内容 指针与结构体 教学目标 应知 指向结构体变量的指针 指向结构体数组的指针 指向结构体的指针作函 ...

最新文章

  1. 如何啃下C++这块复杂又难学的硬骨头?
  2. ASP.NET(c#)实现重定向的三种方法的总结
  3. sqlite可视化工具推荐
  4. cmake cache变量_反复研究好几遍,我才发现关于 CMake 变量还可以这样理解!
  5. 用asp.net实现日历打卡_清单 | 2021年日历请查收
  6. Euclidean, Manhattan, hop-count distance 区别
  7. ios弧形进度条_iOS圆弧渐变进度条的实现
  8. IDEA如何导入项目
  9. 《Dive Into Deeping Learing》学习笔记:深度学习基础
  10. 寻仙服务器要维护多久,新寻仙正式服5.0.6.1更新公告
  11. 信息流推广与普通搜索推广的区别与优势是什么?
  12. 【期末不挂】离散数学 · 常考题型你都会了叭~
  13. .Net服务器性能监控,应用耗时统一监控平台
  14. Unity - 搬砖日志 - 打开项目时崩溃/或是运行不起unity的日志
  15. matlab怎么选清浊音做短时谱,语音信号处理实验三
  16. js去掉最后一个逗号
  17. 解决:python爬取豆瓣电影遇到的KeyError: 'subject_collection_items'错误
  18. 寒假第三周学习总结与反思
  19. 摇摇棒C语言程序,AT89S52单片机16LED摇摇棒设计(含pcb文件,源程序等)
  20. 软件工程导论张海蕃书籍pdf_软件工程导论张海蕃 课后习题答案

热门文章

  1. iPhone界面学习(2)
  2. ASP.NET MVC应用中一个诡异错误的处理
  3. 嵌入式linux入门六步曲
  4. OpenCvSharp4初识
  5. 传智播客黑马 Python学习笔记之python初识
  6. Grammarly SCI语法检查总结
  7. Atitit atimvc rest原理与自定义实现t33 目录 1.1. Web.xml 1 1.2. MvcFilter 2 1.3. jerserMeth 4 原理 过滤器 过滤即可
  8. Atitit React的相关概念东东 attilax总结
  9. Atititi. naming spec 联系人命名与remark备注指南规范v5 r99.docx
  10. atitit agt sys 设置下级代理功能设计.docx