十六进制移位问题? 有没有简便的办法可以把一个十六进制数字进行移位操作?比如:0x672300,左移一位,变成0x723000,左移二位,变成0x230000?右移一位,变成0x067230,右移二位,变成0x006723? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 >> 移位右移运算符 (>>) 将第一个操作数向右移动第二个操作数所指定的位数。备注如果第一个操作数为 int 或 uint(32 位数),则移位数由第二个操作数的低五位给出(第二个操作数 & 0x1f)。如果第一个操作数为 long 或 ulong(64 位数),则移位数由第二个操作数的低六位给出(第二个操作数 & 0x3f)。如果第一个操作数为 int 或 long,则右移位是算术移位(高序空位设置为符号位)。如果第一个操作数为 uint 或 ulong 类型,则右移位是逻辑移位(高位填充 0)。用户定义的类型可重载 >> 运算符;第一个操作数的类型必须为用户定义的类型,第二个操作数的类型必须为 int。有关更多信息,请参见 operator。重载二元运算符时,也会隐式重载相应的赋值运算符(如果有)。示例 复制代码 // cs_operator_right_shift.csusing System;class MainClass{ static void Main() { int i = -1000; Console.WriteLine(i >> 3); }} 输出 -125 请参见参考C# 运算符概念C# 编程指南其他资源C# 参考 0x672300 << 4 // 十六进制左移1位0x672300 << 8 // 十六进制左移2位0x672300 >> 4 // 十六进制右移1位0x672300 >> 8 // 十六进制右移2位 int a1 = 0x672300; int a2=a1>>4; int a3 = a1 >> 8; int a4 = a1 << 4; int a5 = a1 << 8;结果:a2=0x00067230a3=0x00006723;a4=0x06723000;a5=0x67230000;并不是想要的结果! static void Main(string[] args) { int i = 0x672300; Console.WriteLine(i); Console.WriteLine(Left(i, 1)); Console.WriteLine(Left(i, 2)); Console.WriteLine(Right(i, 1)); Console.WriteLine(Right(i, 2)); } static int Left(int num, int digit) { string s = Convert.ToString(num, 16); if (digit > s.Length) return 0; s = s.Substring(digit).PadRight(s.Length, '0'); return Convert.ToInt32(s, 16); } static int Right(int num, int digit) { string s = Convert.ToString(num, 16); if (digit > s.Length) return 0; s = s.Substring(0, s.Length - digit).PadLeft(s.Length, '0'); return Convert.ToInt32(s, 16); } 非常感谢各位,特别是天行健。还有一个类似的问题:如果0x0008表示-1,0x000c表示1,0x0010表示-2,0x0014表示2,0x0018表示-3以此类推,十六进制增加4,十进制正负交替增加1。如何表示它们的关系?比如已知0x01FC,可以知道表示63? 十六进制的一位就是2进制的四位所以2进制中a>>=1;十六进制中就是a>>=4; 新问题:如果0x0008表示-1,0x000c表示1,0x0010表示-2,0x0014表示2,0x0018表示-3 以此类推,十六进制增加4,十进制正负交替增加1。如何表示它们的关系? 比如已知0x01FC,可以知道表示63? 前面的问题已经解决!新问题:如果0x0008表示-1,0x000c表示1,0x0010表示-2,0x0014表示2,0x0018表示-3 以此类推,十六进制增加4,十进制正负交替增加1。如何表示它们的关系? 比如已知0x01FC,可以知道表示十进制63?谢谢! int _Value = 0x0008; int _Test=0; if (_Value % 8 == 0) { _Test = (_Value / 8 * -1); } else { _Test = _Value / 8; } >> 和 << 已经是最简单的了 左移一位: A1 = 0x00673200A1 << 4 -> Temp1 = 0x06732000A1 & 0x11111111 -> Temp2 = 0x00111100Temp1 & Temp2 -> A2 = 0x00732000 我想问下:十六进制(如0x00000011)强制赋值给BYTE类型(如:BYTE RGB = 0x00000011)RGB的值是11还是17? 忽然想明白了:BYTE是UINT8(如0x00),而赋值为UINT32(0x00000011)BYTE RGB只能取到UINT32值的最后两位,即"11"RGB == 0x11;若赋值为0x11111111,BYTE RGB = 0x11111111;则RGB还是0x11; combobox 焦点问题请教 需求一算法。。。请高手指教。 解决100分,不够再加! winform链接数据库 如何把多个表中的一些字段提取出来放到一个datagridview 自定义 Textbox? 谁能帮我用通俗的语言详细描述一下FormsAuthentication.SetAuthCookie 方法 (String, Boolean)的用法或含义?在线立结!!! c#用作底层开发吗? 有谁能做出来:在客户端停止或启动服务器的服务程序? MVVM中两个View使用同一个ViewModel怎样区分是谁调用了它 再问关于Inno Setup C#中关于接口的使用
右移运算符 (>>) 将第一个操作数向右移动第二个操作数所指定的位数。备注
如果第一个操作数为 int 或 uint(32 位数),则移位数由第二个操作数的低五位给出(第二个操作数 & 0x1f)。如果第一个操作数为 long 或 ulong(64 位数),则移位数由第二个操作数的低六位给出(第二个操作数 & 0x3f)。如果第一个操作数为 int 或 long,则右移位是算术移位(高序空位设置为符号位)。如果第一个操作数为 uint 或 ulong 类型,则右移位是逻辑移位(高位填充 0)。用户定义的类型可重载 >> 运算符;第一个操作数的类型必须为用户定义的类型,第二个操作数的类型必须为 int。有关更多信息,请参见 operator。重载二元运算符时,也会隐式重载相应的赋值运算符(如果有)。示例
复制代码
// cs_operator_right_shift.cs
using System;
class MainClass
{
static void Main()
{
int i = -1000;
Console.WriteLine(i >> 3);
}
}
输出
-125
请参见
参考
C# 运算符概念
C# 编程指南其他资源
C# 参考
0x672300 << 4 // 十六进制左移1位
0x672300 << 8 // 十六进制左移2位
0x672300 >> 4 // 十六进制右移1位
0x672300 >> 8 // 十六进制右移2位
int a2=a1>>4;
int a3 = a1 >> 8;
int a4 = a1 << 4;
int a5 = a1 << 8;
结果:
a2=0x00067230
a3=0x00006723;
a4=0x06723000;
a5=0x67230000;
并不是想要的结果!
static void Main(string[] args)
{
int i = 0x672300;
Console.WriteLine(i);
Console.WriteLine(Left(i, 1));
Console.WriteLine(Left(i, 2));
Console.WriteLine(Right(i, 1));
Console.WriteLine(Right(i, 2));
} static int Left(int num, int digit)
{
string s = Convert.ToString(num, 16);
if (digit > s.Length)
return 0;
s = s.Substring(digit).PadRight(s.Length, '0');
return Convert.ToInt32(s, 16);
} static int Right(int num, int digit)
{
string s = Convert.ToString(num, 16);
if (digit > s.Length)
return 0;
s = s.Substring(0, s.Length - digit).PadLeft(s.Length, '0');
return Convert.ToInt32(s, 16);
}
如果0x0008表示-1,0x000c表示1,0x0010表示-2,0x0014表示2,0x0018表示-3
以此类推,十六进制增加4,十进制正负交替增加1。如何表示它们的关系?
比如已知0x01FC,可以知道表示63?
所以2进制中
a>>=1;
十六进制中就是
a>>=4;
如果0x0008表示-1,0x000c表示1,0x0010表示-2,0x0014表示2,0x0018表示-3
以此类推,十六进制增加4,十进制正负交替增加1。如何表示它们的关系?
比如已知0x01FC,可以知道表示63?
如果0x0008表示-1,0x000c表示1,0x0010表示-2,0x0014表示2,0x0018表示-3
以此类推,十六进制增加4,十进制正负交替增加1。如何表示它们的关系?
比如已知0x01FC,可以知道表示十进制63?
谢谢!
if (_Value % 8 == 0)
{
_Test = (_Value / 8 * -1);
}
else
{
_Test = _Value / 8;
}
A1 = 0x00673200
A1 << 4 -> Temp1 = 0x06732000
A1 & 0x11111111 -> Temp2 = 0x00111100
Temp1 & Temp2 -> A2 = 0x00732000
十六进制(如0x00000011)强制赋值给BYTE类型(如:BYTE RGB = 0x00000011)
RGB的值是11还是17?
BYTE是UINT8(如0x00),而赋值为UINT32(0x00000011)
BYTE RGB只能取到UINT32值的最后两位,即"11"
RGB == 0x11;
若赋值为0x11111111,BYTE RGB = 0x11111111;
则RGB还是0x11;