首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
关于c语言中负数位移位操作的漫谈
】的更多相关文章
关于c语言中负数位移位操作的漫谈
近期有个朋友在程序中使用了对16进制数做负数移位(编译器是gcc),本人最次产生好奇.所以研究了一些. 对一个数做负数位移位的操作是不规范的,可是是可行的. 详细样例: char tmp = 0x10; tmp = tmp << -1; 大家猜猜结果是什么.有人猜是tmp左移-1位不就是右移1位吗?结果是0x01? 非常遗憾.电脑和人脑是不一样的.结果是0 为什么呢?为了找出原因,本人进行了一些小小的測试.并做出了有根据的结果. 因为知道+0和-0的差别,所以,我首先将tmp <<…
c语言中的位移位操作
先要了解一下C语言里所有的位运算都是指二进制数的位运算.即使输入的是十进制的数,在内存中也是存储为二进制形式. “<<”用法: 格式是:a<<m,a和m必须是整型表达式,要求m>=0. 功能:将整型数a按二进制位向左移动m位,高位移出后,低位补0. “>>”用法: 格式是:a>>m,a和m必须是整型表达式,要求m>=0. 功能:将整型数a按二进制位向右移动m位,低位移出后,高位补0 C语言中的移位操作,内容不多.不过有些地方你不注意,就疏忽了.闲…
C语言中负数的存储方式
详细介绍负数的文章: https://blog.csdn.net/daiyutage/article/details/8575248 1.以char类型举例,其取值范围是 -128 ~ 127,即-2E7 ~ 2E7-1, 用最高位表示其符号,0表示正数,1表示负数.数值以补码形式存储.正数的补码就是该正数本身,负数的补码需要转化,如下: 1>.对负数取绝对值,用二进制表示 2>. 对每一位取反: 3>. 对该数加1.注意:char类型的0 没有+0 和 -0 的区分,…
单片机的C语言中位操作用法2
单片机的C语言中位操作用法 在对单处机进行编程的过程中,对位的操作是经常遇到的.C51对位的操控能力是非常强大 的.从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点. 这也是在各个领域中都可以看到C的重要原因.在这一节中将详细讲解C51中的位操作及其应 用. .位运算符 C51提供了几种位操作符,如下表所示: 运算符 含义 运算符 含义 & 按位与 ~ 取反 | 按位或 << 左移 ^ 按位异或 >> 右移 )“按位与”运算符(&) 参加…
C语言中的正负数及其输出
在数学中,数字有正负之分.在C语言中也是一样,short.int.long 都可以带上正负号,例如: //负数 ; short a2 = -0x2dc9; //十六进制 //正数 ; ; //八进制 ; //负数和正数相加 ) + (+); 如果不带正负号,默认就是正数. 符号也是数字的一部分,也要在内存中体现出来.符号只有正负两种情况,用1位(Bit)就足以表示:C语言规定,把内存的最高位作为符号位.以 int 为例,它占用 32 位的内存,0~30 位表示数值,31 位表示正负号.如下图所示…
c语言中的文件流
一.打开和关闭文件 #include int main( void ) { FILE* pReadFile = fopen( "E:\\mytest.txt", "r" ); // 打开文件 if ( pReadFile == NULL ) ; fclose( pReadFile ); // 关闭文件 ; } 上面的这段代码,只是一个简单的打开文件,如果成功打开后直接关闭.这里打开的是一文本文件,是以只读的方式打开.使用fopen函数打开,第一个参数是文件路径,第二…
c语言中的左移和右移
先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1;i = i << 2; //把i里的值左移2位 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成 000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因) 需要注意的一个问题是int类型最左…
C语言中的按位移动及其简单引用
C语言中的按位移动及其简单应用 在C语言中按位左移用”<<”表示,按位右移用”>>”表示. 按位左移和按位右移运算经常被用来替换乘二和除二运算,但是要注意,这两者之间并不完全等价.下面就分析一下: 首先明确,按位移动分为逻辑移动和算术移动,具体就是:逻辑左移.算术左移:逻辑右移.算术右移. 算术左移.算术右移.逻辑左移.逻辑右移的操作如下图: 可以看到,逻辑左移=算术左移:都是左移然后右边补零 算术右移和逻辑右移有所区别:逻辑右移是右移并且左边补0,而算术左移是右移并且左边补1(也…
C语言中的左移与右移 <<, >> 位运算
这里参考了一篇很好的位运算,涉及到位运算可能会遇到的正负号问题,左右溢出怎么处理问题. 参考: 1. https://www.cnblogs.com/myblesh/articles/2431806.html 2. 似乎是:原作者: http://hi.baidu.com/todaygoodhujun/blog/item/b8c10dd15ae4dfd3572c8417.html 先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:int i = 1; i = i…
C语言中两位ASCII码可以表示汉字
最近偶然有人问到这个相关字符编码的问题,所以百度了下参考了这两个资料,进行了简单分析. ********************************************************************** 参考资料一:http://zhidao.baidu.com/link?url=YDoT2OLdKEElDQ86Ce_wEtKt9Nrn2yJ8TIb9JkasvaLvi8D66RRwSvxn2DkFRVM_OOnq4fCoJPA-19AmpPeypa ?“206 210…