Assembly C中的按位运算

admin 2022年11月25日23:34:42评论20 views字数 1023阅读3分24秒阅读模式

不同于某些高级语言的是,C提供了按位操作的运算符。AND运算符用二元运算符&来描述。OR运算符用二元运算符|来描述。而NOT运算符是用一元运算符~ 来描述。


C中的二元运算符<<和>>执行移位操作。运算符<<执行左移操作而运算符>>执行右移操作。这些运算符有两个操作数。左边的操作数是需要移位的数值,右边的操作数是需要移的位数。如果需要移位的数值是无符号类

型,那么就执行了一次逻辑移位。如果需要移位的数值是有符号类型(比如:int),那么就执行了一次算术移位。下面是一些使用了这些运算符的C代码例子:


Assembly C中的按位运算


在C中使用按位运算的目的与在汇编语言中使用按位运算的目的是一样的。它们可以允许你操作数据的单个比特位,而且可以用在快速乘除法中。事实上,一个好的C编译器应该可以自动用移位来进行乘法运算如:x*= 2。


许多操作系统的API(例如:POSIX和Win32)包含了一些函数,这些函数使用的操作数含有按位编码的数据。例如:POSIX系统就为三种不同类型的用户保留了文件的权限:user (用户,owner可能是一个更好的名字),group(组用户)和others(其它用户)。每一种类型的用户可以被授予进行读,写和/或执行一个文件的权限。


要改变一个文件的权限,要求C程序员进行单个的位操作。POSIX定义了几个宏来做这件事(看表3.6)。chmod函数可以用来设置文件的权限。这个函数有两个参数,一个是表示需设置的文件文件名的字符串,另外一个是为需要的权限设置了正确位的整形 。例如,下面的代码设置了这样的权限:允许文件的owner用户对文件可读可写,在group中的用户权限为可读而others用户没有权限访问。


Assembly C中的按位运算

chmod("foo", S_IRUSR | S_IWUSR | S_IRGRP );


POSIX中stat函数可以用来得到文件的当前权限位。与chmod函数一起使用,它可以用来改变某些权限而不影响到其它权限。下面是一个移除文件的others用户的写权限和增加owner用户的读权限的例子。同时,其它权
限没有被改变。


1 struct stat file_stats ; /* stat()使用的结构体*/2 stat ("foo", & file stats ); /* 读文件信息¯le stats.st mode中有权限位*/3 chmod("foo", ( file stats .st_mode & ~S_IWOTH) | S_IRUSR);

Assembly C中的按位运算


原文始发于微信公众号(汇编语言):Assembly C中的按位运算

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月25日23:34:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Assembly C中的按位运算http://cn-sec.com/archives/1420079.html

发表评论

匿名网友 填写信息