操作系统:WIN7 32位家庭版, XP

编译环境:C-FREE5.0

编译器:  标准C89(32位)

代码1:

#include#includeint main(void)

{

/*

unsigned short i;

unsigned short j;

unsigned short k;*/

short i;

short j;

short k;

i = 0;

j = 0xffff;

k = ~j;

printf("i = %d   ,", i);

printf("%x\n", i);

printf("j = %d   ,", j);

printf("%x\n", j);

printf("k = %d   ,", k);

printf("%x\n", k);

printf("~i = %d   ,", ~i);

printf("%x\n", ~i);

printf("~j = %d   ,", ~j);

printf("%x\n", ~j);

if(i == ~j){

printf("i == ~j\n");

}

else{

printf("i != ~j\n");

}

if(i == k){

printf("i == k\n");

}

else{

printf("i != k\n");

}

return 1;

}

运行结果:

#include#includeint main(void)

{

unsigned short i;

unsigned short j;

unsigned short k;

/*

short i;

short j;

short k;*/

i = 0;

j = 0xffff;

k = ~j;

printf("i = %d   ,", i);

printf("%x\n", i);

printf("j = %d   ,", j);

printf("%x\n", j);

printf("k = %d   ,", k);

printf("%x\n", k);

printf("~i = %d   ,", ~i);

printf("%x\n", ~i);

printf("~j = %d   ,", ~j);

printf("%x\n", ~j);

if(i == ~j){

printf("i == ~j\n");

}

else{

printf("i != ~j\n");

}

if(i == k){

printf("i == k\n");

}

else{

printf("i != k\n");

}

return 1;

}

运行结果如下:

只要懂得数据在内存中存储的形式和按位取反的意义,相信理解上面两段代码就不成问题了。这确实是C里面最基本的概念了,但最近写代码时却没想起来,直接使用形式“if(i == ~j)”,很显然,这样是很危险的,尤其是当定义i和j为无符号数据类型时,很可能不会得出想要的结果。 然而,神奇的是,定义的无符号字符型数据经过keil C51编译器编译之后在8位51单片机上跑,正常;而用IAR编译器编译过之后,就会出现异常,推测应该是keilC51编译器进行了一些特殊处理吧。。。 为了保证万无一失,最好是进行取反运算之后,对其结果进行强制类型转换,比如赋给一个变量,然后再进行比较或者其他运算。

keil c语言中位取反,关于按位取反“~”的故事相关推荐

  1. c51转汇编语言窗口,在C51语言中如何嵌入汇编语言

    keil C 语言中嵌入汇编语言进行混合编程,方法如下: 1.在C 文件中要嵌入汇编代码片以如下方式加入汇编代码 #pragma ASM ; Assembler Code Here #pragma E ...

  2. keil c语言 延迟程序,Keil C51程序设计中几种精确延时方法

    前几天时间在做一个基于51单片机开发板的等精度频率计,用LCD1602液晶显示的,晶振是22.1184MHZ,用得是测频率法,目的是想做到能够测试0--900KHZ的信号. 液晶显示部分花了我好几天才 ...

  3. c语言中按位或赋值给变量,[转载]C语言位运算符在单片机上的应用

    C语言位运算符 学过汇编的朋友都知道汇编对位的处理能力是很强的,但是C语言也能对运算对象进行按位操作,从而使C语言也能具有一定的对 硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不 ...

  4. 解析C语言中数据在内存中的存储

    系列文章目录 文章目录 系列文章目录 前言 一.数据类型介绍 1.类型的基本归类 1.整形家族 2.浮点型家族 3.构造类型 4.指针类型 5.空类型 二.整型在内存中的存储 1.原码.反码.补码 2 ...

  5. java语言中声明布尔型_【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  6. asin c语言中 返回值范围_大学C语言考试易错知识点总结

    作者:cggwz 来源:https://blog.csdn.net/cggwz/article/details/103740713?utm_medium=distribute.pc_relevant. ...

  7. c语言科学计数法_C入门:C语言中数据的储存(上)

    How Data is stored in computer memory? 储存数据是计算机进行各种数据操作的基础,为了理解计算机可以对哪些数据进行怎样的操作,有必要了解数据在计算机中的储存方式. ...

  8. 2个字节能存多少个16进制_Java语言中最大的整数再加1等于多少?看完秒懂

    短文涨姿势,看了不白看,不关注等啥? 已知Java语言中int类型所能表示的最大整数为2147483647,请问以下代码执行结果是什么? 一部分人都会认为这段程序压根就无法通过编译,也有人认为,这段程 ...

  9. 常见位操作及运算应用举例:1,C语言中位运算符异或“∧”的作用​​​​​​​2,异或运算的作用3,(与运算)、|(或运算)、^(异或运算)

    1 C语言中位运算符异或"∧"的作用: 异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0 ...

最新文章

  1. Idea实体类上加@Data注解但get/set方法不生效
  2. 【Python CheckiO 题解】Easy Unpack
  3. xcode 4.2开发 ——navigation controller 添加按钮
  4. html的学习思维导图
  5. Bootstrap 标准的分页导航
  6. 数据分析的数据来源于哪
  7. Top Down Operator Precedence - 自顶向下算符优先分析法
  8. discuz开发经验discuz x3 怎么在帖子列表显示论坛板块图标
  9. PPT模板、素材下载网站(纯干货,建议收藏)
  10. 金蝶如何用计算机,金蝶软件要换电脑用,该怎么处理?
  11. 为何程序员工资高?原因都在这儿了!
  12. react 使用ajax axios,react中使用Ajax请求(axios,Fetch)
  13. IOS之UIImageView--小实例项目--带音效的拳皇动画
  14. uniapp自定义导航栏与手机状态栏重叠问题
  15. cd cd~ cd- cd. cd.. cd/ cd./ cd../.. cd!$ cd /home的区别
  16. android锁屏界面快捷键,Funtouch新特性 锁屏快捷键可以自定义
  17. python x%y_Python运算符
  18. Python 包管理工具:pip 用法详解 + 常用pip指令
  19. Pytorch实现mnist手写数字识别
  20. 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛

热门文章

  1. OCR文本扫描 轮廓检测 透视变换
  2. Visio Pro 2013安装破解与初体验
  3. 多线程随想录——多线程分块下载文件
  4. idea自动对齐快捷键及其他软件一些常用快捷键
  5. html5帘幕,腾讯实战案例!聊聊刷一刷红包预热HTML 5背后的设计过程
  6. SpringBoot之Undertow
  7. 【JZOJ4793】【GDOI2017模拟9.21】妮厨的愤怒
  8. php 处理 url 加密_php url编码与解码(加密/解密)
  9. 独立站引流渠道小妙招,教你快速上手站外推广
  10. 对战类区块链游戏NFT游戏开发